2017-10-11 18 views
1

Apache CXF wsdl2java 실행 파일 (2.7.8 및 3.2.0 버전을 시도 함)을 사용하여 웹 서비스 용 Java 소스를 생성하려고합니다.Apache CXF wsdl2java InternalError : 미해결 된 참조

내 WSDL 파일이 외부 기관 (TMDD)에서 온, 그래서 내가 파일을 처음 생성했을 때 내가 잘

을 생성 가정은 "비 독특한 신체 부위"오류가 발생합니다

org.apache.cxf.tools.common.ToolException: Non-unique body parts! In a port, operations must have unique operation signatures on the wire for successful dispatching. In port {http://www.tmdd.org/303/dialogs}tmddOCSoapHttpServicePort, operations "{http://www.tmdd.org/303/dialogs}dlVideoSwitchStatusRequest" and "{http://www.tmdd.org/303/dialogs}dlIntersectionSignalStatusRequest" have the same request body block {http://www.tmdd.org/303/messages}deviceInformationRequestMsg 

    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.validate(WSDLToJavaContainer.java:735) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:276) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412) 
    at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:185) 

이를 피하기 위해 dlVideoSwitchStatusRequest 작업에서 새로운 입력 메시지 유형을 만드는 방법을 해결했습니다. 내 단계는 다음과 같다 :

  1. <message name="MSG_VideoSwitchStatusRequest"> <part name="message" element="tmdd:videoSwitchStatusRequestMsg"/> </message>

  2. 이 videoSwitchStatusRequestMsg

    이 하나가 다른에 대한 .xsd 파일과 유사한 것들에 정의되어 <xs:element name="videoSwitchStatusRequestMsg" type="VideoSwitchStatusRequest"> <xs:annotation> <xs:documentation> <objectClass>VideoSwitch</objectClass> <requirement>REQ1109</requirement> </xs:documentation> </xs:annotation> </xs:element>

    를 선언 새 메시지 형식을 만듭니다 작업.

  3. <operation name="dlVideoSwitchStatusRequest"> 
        <documentation><objectClass>VideoSwitch</objectClass><objectClass>ExternalCenter</objectClass><objectClass>OwnerCenter</objectClass><msgPattern>R-R</msgPattern><requirement>REQ538</requirement></documentation> 
        <input message="tns:MSG_VideoSwitchStatusRequest"/> <!-- This is the new type --> 
        <!--<input message="tns:MSG_DeviceInformationRequest"/> This is the old one --> 
        <output message="tns:MSG_VideoSwitchStatus"/> 
        <fault name="errorReport" message="tns:MSG_ErrorReport"/> 
    </operation> 
    
    이와

는, 그 오류가 해결 된 해당 작업 (내가 생각하는)에 대한 입력 형식을 수정,하지만 지금은

Exception in thread "main" java.lang.InternalError: unresolved reference 
    at com.sun.xml.xsom.impl.parser.DelayedRef._get(DelayedRef.java:103) 
    at com.sun.xml.xsom.impl.parser.DelayedRef$Type.getType(DelayedRef.java:148) 
    at com.sun.xml.xsom.impl.ElementDecl.getType(ElementDecl.java:110) 
    at com.sun.xml.xsom.impl.ElementDecl.updateSubstitutabilityMap(ElementDecl.java:174) 
    at com.sun.xml.xsom.impl.parser.ParserContext.getResult(ParserContext.java:141) 
    at com.sun.xml.xsom.parser.XSOMParser.getResult(XSOMParser.java:214) 
    at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:538) 
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:269) 
    at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95) 
    at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:459) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:723) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:267) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) 
    at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412) 
    at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:105) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 
    at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:185) 

이 하나가 또 다른 오류를 얻을 너무 일반적이고 아파치 사이트에서 정보 나 문서를 찾지 못했습니다.

답변

1

글쎄요, B. Leal이 제안한 것처럼, 이전 tmdd.wsdl을 삭제하고 데이터를 필요로하는 각 장치에 대한 별도의 파일로 내 wsdl 파일을 다시 작성하십시오.

대부분의 작업이 다시 완료되었으므로 오류의 출처를 100 % 확신 할 수는 없지만 이전에 사용 된 일부 유형과 관련되어 있다고 확신합니다. wsdl은 선언되지 않았습니다. 올바르게 xsd 파일에 있습니다.

나는이 큰 도움이 아니라는 것을 알고,하지만 누군가가이 같은 오류에 빠진다 경우, 당신은 두 가지 선택이 있다고 생각 : 내가했던 것처럼,

  • 당신의 wsdl 파일을 다시 수행하십시오. (내가 권장하는 것보다 쉽다.)
  • wsdl에 사용 된 모든 단일 유형이 xsd 파일에 존재하는지, 그리고 맞는지 확인하십시오.

도움 주셔서 감사합니다.

2

먼저 TMDD wsdl이 잘 생성되었다고 가정 할 필요가 없습니다. 나는 얼마 전에 그것을 작업했고 많은 오류가있다.

TMDD.wsdl 파일의 고유 버전을 다시 작성하여 사용하려는 항목으로 만 제한하는 것이 좋습니다.

시도해보고 얻은 것을 알려주십시오.