2016-12-06 4 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없이 노력하고 원격 호출 할 수 있습니다.

[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) 

우리는 JDK 8/썬 JDK 기술 사양

  • 봄 부팅 1.2.4/1.4.2
  • 자유 프로필 16.0.0.3
  • IBM 이하로 사용하는 8
+0

좀 더 쉽게 읽을 수 있도록 질문에 기본 서식을 추가했습니다. 다음 번에 직접 할 수 있도록 Stack Overflow의 [formatting guidelines] (https://stackoverflow.com/help/formatting)를 검토하십시오. – Chris

답변

0

"org.omg.CORBA.MARSHAL"은 모든 것을 말합니다. 양쪽의 인터페이스 정의 (IDL)는 동일해야합니다. 마샬링 오류는 정확하게 발생하지 않습니다. 아마 코드에 반환 된 예외에 대한 정의가 없거나 정의가 원격 측면의 정의와 다릅니다.

+0

나는 MDM Infospeher 원격 EJB를 호출하고있다. 코드는 전통적인 WebSphere 애플리케이션 서버에서 잘 작동한다. 리버티 16.0.0.3에 코드를 배치하면 오류가 발생한다. 서버 특정 항아리가 누락되었거나 관련이있다. JDK? 로깅 디버그 및 원격 EJB에서 응답 Object 캡처 방법은 있습니까? – springbootlearner

+0

IDL은이 두 가지 경우에 따라 다를 수 있습니다. 서버는 당신과 다른 IDL을 사용합니다. 여러 번 약간의 버전 차이가 있습니다. 일부 최신 버전에서는 일부 매개 변수가 추가/제거되거나 다른 유형이있을 수 있습니다. – BJovke

+0

IDL은 Java 코드로 컴파일되므로 코드를 변경하는 것 외에는 서버 측에서 많은 작업을 수행 할 수 없습니다. 이는 아마도 옵션이 아닙니다. 할 수있는 일은 서버에서와 동일한 IDL을 사용하고 코드 용으로 컴파일하는 것입니다. 어쩌면 서버의 어딘가에있는 ".idl"파일을 찾을 수 있으며, 사용하고있는 IDL과 동일하거나 유사한 파일 이름을 검색 할 수 있습니다. – BJovke

관련 문제