Axis2 Web服务和Eclipse WSDL编写:在运行wsdl2java时,向WSDL添加axis错误会导致异常
我正在尝试使用ApacheAxis2 1.4.1创建一个契约优先的Web服务。由于Eclipse有一个非常完整的wsdl编辑器,我开始使用Eclipse的编辑器自动运行我的wsdl。一切都很好,我可以使用wsdl2java生成Java类,Web服务在部署时也可以工作。但是,向Web服务添加异常或错误会导致异常,表示元素QName对于错误为null。有人知道这是什么原因吗?检查wsdl也不会给我任何直接的答案。故障/异常的定义似乎与其他元素一样 以下是命令和堆栈跟踪:Axis2 Web服务和Eclipse WSDL编写:在运行wsdl2java时,向WSDL添加axis错误会导致异常,java,exception,axis2,web-services,fault,Java,Exception,Axis2,Web Services,Fault,我正在尝试使用ApacheAxis2 1.4.1创建一个契约优先的Web服务。由于Eclipse有一个非常完整的wsdl编辑器,我开始使用Eclipse的编辑器自动运行我的wsdl。一切都很好,我可以使用wsdl2java生成Java类,Web服务在部署时也可以工作。但是,向Web服务添加异常或错误会导致异常,表示元素QName对于错误为null。有人知道这是什么原因吗?检查wsdl也不会给我任何直接的答案。故障/异常的定义似乎与其他元素一样 以下是命令和堆栈跟踪: >d:\axis2-1
>d:\axis2-1.4.1\bin\wsdl2java.bat -o src-test -ss -uri JavaIntegrationModule.wsdl
Using AXIS2_HOME: D:\axis2-1.4.1
Using JAVA_HOME: D:\Java\jdk1.5.0_14
Retrieving document at 'JavaIntegrationModule.wsdl'.
[INFO] The src-test\src\org\example\www\javaintegrationmodule\JavaIntegrationModuleSkeleton.java file cannot be overwritten.
[INFO] The src-test\src\org\example\www\javaintegrationmodule\JavaIntegrationModuleMessageReceiverInOut.java file cannot be overwritten.
D:\>d:\axis2-1.4.1\bin\wsdl2java.bat -o src-test -ss -uri JavaIntegrationModule.wsdl
Using AXIS2_HOME: D:\axis2-1.4.1
Using JAVA_HOME: D:\Java\jdk1.5.0_14
Retrieving document at 'JavaIntegrationModule.wsdl'.
D:\>d:\axis2-1.4.1\bin\wsdl2java.bat -o src-test -ss -uri JavaIntegrationModule.wsdl
Using AXIS2_HOME: D:\axis2-1.4.1
Using JAVA_HOME: D:\Java\jdk1.5.0_14
Retrieving document at 'JavaIntegrationModule.wsdl'.
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: org.apache.axis2.wsdl.codegen.CodeGenerationException: jav
a.lang.RuntimeException: Element QName is null for getSolutionByIdFault!
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: Element QName is null for getSolutionByIdFault
!
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java
:1370)
at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:253)
... 2 more
Caused by: java.lang.RuntimeException: Element QName is null for getSolutionByIdFault!
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultParamElements(AxisServiceBasedMultiLanguageEmi
tter.java:2829)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultElement(AxisServiceBasedMultiLanguageEmitter.j
ava:2748)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.generateMethodElement(AxisServiceBasedMultiLanguageEmi
tter.java:2269)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.loadOperations(AxisServiceBasedMultiLanguageEmitter.ja
va:2151)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.createDOMDocumentForSkeleton(AxisServiceBasedMultiLang
uageEmitter.java:2065)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.writeSkeleton(AxisServiceBasedMultiLanguageEmitter.jav
a:1991)
at org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.emitSkeleton(AxisServiceBasedMultiLanguageEmitter.java
:1327)
... 3 more
和WSDL文件:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/JavaIntegrationModule/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="JavaIntegrationModule" targetNamespace="http://www.example.org/JavaIntegrationModule/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/JavaIntegrationModule/">
<xsd:element name="getSolutionById">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdFault">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="getSolutionByIdFault"
type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getSolutionByIdRequest">
<wsdl:part element="tns:getSolutionById" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdResponse">
<wsdl:part element="tns:getSolutionByIdResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdFault">
<wsdl:part name="parameters" element="tns:getSolutionByIdFault"></wsdl:part>
</wsdl:message>
<wsdl:portType name="JavaIntegrationModule">
<wsdl:operation name="getSolutionById">
<wsdl:input message="tns:getSolutionByIdRequest"/>
<wsdl:output message="tns:getSolutionByIdResponse"/>
<wsdl:fault name="fault" message="tns:getSolutionByIdFault"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JavaIntegrationModuleSOAP" type="tns:JavaIntegrationModule">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getSolutionById">
<soap:operation soapAction="http://www.example.org/JavaIntegrationModule/getSolutionById"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JavaIntegrationModule">
<wsdl:port binding="tns:JavaIntegrationModuleSOAP" name="JavaIntegrationModuleSOAP">
<soap:address location="http://www.example.org/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我想我现在已经自己解决了这个问题。似乎出于某种原因,EclipseWSDL编辑器没有将错误添加到WSDL的绑定部分 所以当我补充说:
<wsdl:fault name="fault">
<soap:fault use="literal" name="fault" />
</wsdl:fault>
对于绑定,它编译得很好
完整的wsdl现在是:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/JavaIntegrationModule/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="JavaIntegrationModule" targetNamespace="http://www.example.org/JavaIntegrationModule/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/JavaIntegrationModule/">
<xsd:element name="getSolutionById">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdFault">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="getSolutionByIdFault"
type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getSolutionByIdRequest">
<wsdl:part element="tns:getSolutionById" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdResponse">
<wsdl:part element="tns:getSolutionByIdResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdFault">
<wsdl:part name="parameters" element="tns:getSolutionByIdFault"></wsdl:part>
</wsdl:message>
<wsdl:portType name="JavaIntegrationModule">
<wsdl:operation name="getSolutionById">
<wsdl:input message="tns:getSolutionByIdRequest"/>
<wsdl:output message="tns:getSolutionByIdResponse"/>
<wsdl:fault name="fault" message="tns:getSolutionByIdFault"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JavaIntegrationModuleSOAP" type="tns:JavaIntegrationModule">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getSolutionById">
<soap:operation soapAction="http://www.example.org/JavaIntegrationModule/getSolutionById"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="fault">
<soap:fault use="literal" name="fault" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JavaIntegrationModule">
<wsdl:port binding="tns:JavaIntegrationModuleSOAP" name="JavaIntegrationModuleSOAP">
<soap:address location="http://www.example.org/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我想我现在已经自己解决了这个问题。似乎出于某种原因,EclipseWSDL编辑器没有将错误添加到WSDL的绑定部分 所以当我补充说:
<wsdl:fault name="fault">
<soap:fault use="literal" name="fault" />
</wsdl:fault>
对于绑定,它编译得很好
完整的wsdl现在是:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/JavaIntegrationModule/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="JavaIntegrationModule" targetNamespace="http://www.example.org/JavaIntegrationModule/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/JavaIntegrationModule/">
<xsd:element name="getSolutionById">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="in" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="out" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="getSolutionByIdFault">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="getSolutionByIdFault"
type="xsd:string">
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="getSolutionByIdRequest">
<wsdl:part element="tns:getSolutionById" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdResponse">
<wsdl:part element="tns:getSolutionByIdResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="getSolutionByIdFault">
<wsdl:part name="parameters" element="tns:getSolutionByIdFault"></wsdl:part>
</wsdl:message>
<wsdl:portType name="JavaIntegrationModule">
<wsdl:operation name="getSolutionById">
<wsdl:input message="tns:getSolutionByIdRequest"/>
<wsdl:output message="tns:getSolutionByIdResponse"/>
<wsdl:fault name="fault" message="tns:getSolutionByIdFault"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="JavaIntegrationModuleSOAP" type="tns:JavaIntegrationModule">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getSolutionById">
<soap:operation soapAction="http://www.example.org/JavaIntegrationModule/getSolutionById"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="fault">
<soap:fault use="literal" name="fault" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="JavaIntegrationModule">
<wsdl:port binding="tns:JavaIntegrationModuleSOAP" name="JavaIntegrationModuleSOAP">
<soap:address location="http://www.example.org/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我也是!您的解决方案节省了我四处查看的时间:)
顺便说一句,在Eclipse中,当您单击WSDL查找的设计选项卡并选择Binding元素时,您可以从Properties视图自动“生成绑定内容”。通过这种方式,您不必手动修改WSDL源代码。我也是!您的解决方案节省了我四处查看的时间:) 顺便说一句,在Eclipse中,当您单击WSDL查找的设计选项卡并选择Binding元素时,您可以从Properties视图自动“生成绑定内容”。通过这种方式,您不必手动修改WSDL源代码