3

When I generate the required classes for a SOAP client, via Apache CXF 2.x WSDL2Java I get this exception. Any help is much appreciated. Thanks!

Exception in thread "main" java.lang.NoSuchMethodError: com.sun.xml.bind.v2.util.XmlFactory.allowExternalAccess(Ljavax/xml/validation/SchemaFactory;Ljava/lang/String;Z)Ljavax/xml/validation/SchemaFactory; at com.sun.tools.xjc.reader.internalizer.DOMForest.weakSchemaCorrectnessCheck(DOMForest.java:478) at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:260) 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:460) at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:727) at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:271) at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:165) at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:416) at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 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: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>
HaloMediaz
  • 1,251
  • 2
  • 13
  • 31
  • How are you running `wsdl2java`? What version of the JAXB runtime are you using (`jaxb-impl-.jar`?) – ck1 Jun 11 '16 at 21:26
  • Try to generate the code using SoapUI tool. For step by step example see [Generating Client JAVA code for WSDL using SOAP UI](https://dzone.com/articles/generating-client-java-code) – Salman Jun 12 '16 at 11:39
  • @ck1 I added the latest jar to my buildpath. That did not fix the problem :( – HaloMediaz Jun 12 '16 at 16:55
  • Which java version are you using?. JDK ships with JAXB from java6. Ensure that you do not have old versions of jaxb in classpath – pedrofb Jun 13 '16 at 08:04
  • I'm not sure if it is essential, but if you use CXF 2.7, have you included stax2-api and Woodstox-core-asl jars from the 2.7.x CXF distribution? – pedrofb Jun 13 '16 at 09:32
  • @pedrofb thanks for the help. It works :) – HaloMediaz Jun 14 '16 at 01:44
  • Ok @HaloMediaz! I am going to summarize the comments for your post – pedrofb Jun 14 '16 at 05:30

2 Answers2

1

You are using older jaxb-impl dependecy in pom.xml.

All jaxb-impl version are listed here

ChandraBhan Singh
  • 2,841
  • 1
  • 22
  • 27
0

[Solved in comments]

JDK ships with JAXB from java6. Ensure that you do not have old versions of jaxb in classpath. If you use CXF 2.7, include stax2-api and Woodstox-core-asl jars from the 2.7.x CXF distribution

pedrofb
  • 37,271
  • 5
  • 94
  • 142