【发布时间】:2016-10-12 14:54:14
【问题描述】:
当我通过 Apache CXF 2.x WSDL2Java 为 SOAP 客户端生成所需的类时,我得到了这个异常。任何帮助深表感谢。谢谢!
线程“主”java.lang.NoSuchMethodError 中的异常:com.sun.xml.bind.v2.util.XmlFactory.allowExternalAccess(Ljavax/xml/validation/SchemaFactory;Ljava/lang/String;Z)Ljavax/xml /验证/架构工厂; 在 com.sun.tools.xjc.reader.internalizer.DOMForest.weakSchemaCorrectnessCheck(DOMForest.java:478) 在 com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:260) 在 com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95) 在 org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:460) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:727) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:271) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:165) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:416) 在 org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
WSDL
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://www.example.org/Calculator/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="Calculator"
targetNamespace="http://www.example.org/Calculator/">
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/Calculator/">
<xsd:element name="Add">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="a" type="xsd:int" />
<xsd:element minOccurs="0" name="b" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="AddResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="result" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Subtract">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="a" type="xsd:int" />
<xsd:element minOccurs="0" name="b" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SubtractResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="0" name="result" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<wsdl:message name="AddRequest">
<wsdl:part element="tns:Add" name="parameters"/>
</wsdl:message>
<wsdl:message name="AddResponse">
<wsdl:part element="tns:AddResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="SubtractRequest">
<wsdl:part name="parameters" element="tns:Subtract"></wsdl:part>
</wsdl:message>
<wsdl:message name="SubtractResponse">
<wsdl:part name="parameters" element="tns:SubtractResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="Calculator">
<wsdl:operation name="Add">
<wsdl:input message="tns:AddRequest"/>
<wsdl:output message="tns:AddResponse"/>
</wsdl:operation>
<wsdl:operation name="Subtract">
<wsdl:input message="tns:SubtractRequest"></wsdl:input>
<wsdl:output message="tns:SubtractResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CalculatorSoapBinding" type="tns:Calculator">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Add">
<soap:operation soapAction="http://www.example.org/Calculator/Add"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Subtract">
<soap:operation soapAction="http://www.example.org/Calculator/Subtract"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="CalculatorService">
<wsdl:port binding="tns:CalculatorSoapBinding" name="CalculatorSoapPort">
<soap:address location="http://www.example.org/Calculator"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
【问题讨论】:
-
wsdl2java的运行情况如何?您使用的是哪个版本的 JAXB 运行时 (jaxb-impl-<version>.jar?) -
尝试使用 SoapUI 工具生成代码。有关分步示例,请参阅Generating Client JAVA code for WSDL using SOAP UI
-
@ck1 我将最新的 jar 添加到我的构建路径中。这并没有解决问题:(
-
您使用的是哪个 java 版本? JDK 附带来自 java6 的 JAXB。确保类路径中没有旧版本的 jaxb
-
我不确定它是否必不可少,但如果您使用 CXF 2.7,是否包含 2.7.x CXF 发行版中的 stax2-api 和 Woodstox-core-asl jar?
标签: java web-services soap cxf wsdl2java