2016-12-06 11 views
0

Libertyプロファイル16.0.0.3を使用してリモートEJBサービス(MDMサービス)を呼び出そうとしています。私の参照コードは以下のようになります。上記のコードではorg.omg.CORBA.MARSHAL:ValuetypeがStreamableValueまたはCustomMarshalを実装していません

ctx = new InitialContext(); 
Object obj = 
     ctx.lookup("corbaname:iiop:myhost:9810/NameServiceServerRoot#com/dwl/base/requestHandler/beans/DWLServiceController"); 
     dwlServiceControllerHome = (DWLServiceControllerHome)PortableRemoteObject.narrow(obj, DWLServiceControllerHome.class); 
     dwlServiceController = dwlServiceControllerHome.create(); 
     HashMap<String, String> contextMap = createContextMap(); 

     String response = dwlServiceController.processRequest(contextMap, wccReqString).toString().trim(); 
          try { 
           StringReader reader = new StringReader(response);     
           StreamSource streamSource = new StreamSource(reader); 
           tcrmResp = (TCRMService) providerMarshaller.unmarshal(streamSource); 
          } catch (Exception e) { 

           e.printStackTrace(); 

           throw e; 
          } 

I EJB service.Positiveシナリオは、我々は、エラーの下になって(リモートEJBサービスはカスタム有効な例外をスローする場合)負のシナリオデータとサービスをテストする任意のissue.Whenせずに作業しているリモート呼び出すことができます。

我々は、技術仕様の下

  • 春ブーツ1.2.4/1.4.2
  • リバティプロフィール16.0.0.3
  • IBM JDK 8 /日JDK 8
を使用している
[ERROR ] MARSHAL "Valuetype does not implement StreamableValue or CustomMarshal", at pos=0x214 
[err] org.omg.CORBA.MARSHAL: Valuetype does not implement StreamableValue or CustomMarshal: vmcid: 0x0 minor code: 0x0 completed: No 
[err] at org.apache.yoko.orb.OB.ValueReader.unmarshalValueState(ValueReader.java:716) 
[err] at org.apache.yoko.orb.OB.ValueReader.access$300(ValueReader.java:54) 
[err] at org.apache.yoko.orb.OB.ValueReader$ClassCreationStrategy.create(ValueReader.java:196) 
[err] at [internal classes] 
[err] at java.lang.Throwable.readObject(Throwable.java:388) 
[err] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[err] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95) 
[err] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) 
[err] at java.lang.reflect.Method.invoke(Method.java:508) 
[err] at org.apache.yoko.rmi.impl.ValueDescriptor.readSerializable(ValueDescriptor.java:735) 
[err] at [internal classes] 
[err] at org.apache.yoko.orb.OB.ValueReader.access$200(ValueReader.java:54) 
[err] at org.apache.yoko.orb.OB.ValueReader$ClassCreationStrategy.create(ValueReader.java:189) 
[err] at [internal classes] 
[err] at com.dwl.base.requestHandler.beans._DWLServiceController_Stub.processRequest(_DWLServiceController_Stub.java:1001) 

+0

読みやすいように、基本的な書式をいくつか追加しました。スタックオーバーフローの[フォーマットガイドライン](https://stackoverflow.com/help/formatting)を見直して、次回にこれを行うことができます。 – Chris

答えて

0

"org.omg.CORBA.MARSHAL"はそれをすべて示しています。両側のインターフェースの定義(IDL)は同一でなければなりません。マーシャリングエラーは、そうでない場合に正確に発生します。おそらくあなたのコードには、返された例外の定義がないか、リモート側の定義とは異なる定義があります。

+0

私はMDM InfospeherのリモートEJBを呼び出しています。従来のWebSphereアプリケーションサーバーではコードが正常に動作しています。リバティー16.0.0.3にコードをデプロイすると、エラーが発生します。サーバー固有のjarファイルがないか、 JDK?リモートEJBからログをデバッグして応答オブジェクトを取得できる方法はありますか? – springbootlearner

+0

IDLは、これらの2つのケースでおそらく異なるでしょう。サーバーは、あなたとは異なるIDLを使用しています。何度か、少しのバージョンの違いがあります。いくつかの新しいバージョンでは、いくつかのパラメータが追加/削除されたり、異なるタイプを持つことがあります。 – BJovke

+0

IDLはJavaコードにコンパイルされているため、コードを変更する以外はサーバー側ではほとんどできません。おそらくオプションではありません。 あなたができることは、サーバー上と同じIDLを使用してコード用にコンパイルすることです。サーバー上のどこかにある ".idl"ファイルを探して、使用しているIDLと同じか類似のファイル名を検索することができます。 – BJovke

関連する問題