java.lang.IllegalStateException: Cannot create communicator instance: JAXB context has not been set

38 Views Asked by At

I have the following java class generated from wsimport. I am running under jdk 8.

package https.docs_oasis_open_org.legalxml_courtfiling.ns.v5_0wsdl.courtpolicymde;

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;


/**
 * This class was generated by the JAX-WS RI.
 * Eclipse Metro/2.4.9 (RELEASE-2.4.9-508d95f; 2023-02-03T10:14:27+0000) JAXWS-RI/2.3.6 JAXWS-API/2.3.3 JAXB-RI/2.3.8 JAXB-API/2.3.3
 * Generated source version: 2.2
 * 
 */
@WebServiceClient(name = "CourtPolicyMDEService", targetNamespace = "https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0WSDL/CourtPolicyMDE", wsdlLocation = "/wsdl/wsi/service/CourtPolicyMDEService.wsdl")
public class CourtPolicyMDEService
    extends Service
{

    private static final URL COURTPOLICYMDESERVICE_WSDL_LOCATION;
    private static final WebServiceException COURTPOLICYMDESERVICE_EXCEPTION;
    private static final QName COURTPOLICYMDESERVICE_QNAME = new QName("https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0WSDL/CourtPolicyMDE", "CourtPolicyMDEService");

    static {
        COURTPOLICYMDESERVICE_WSDL_LOCATION = https.docs_oasis_open_org.legalxml_courtfiling.ns.v5_0wsdl.courtpolicymde.CourtPolicyMDEService.class.getResource("/wsdl/wsi/service/CourtPolicyMDEService.wsdl");
        WebServiceException e = null;
        if (COURTPOLICYMDESERVICE_WSDL_LOCATION == null) {
            e = new WebServiceException("Cannot find '/wsdl/wsi/service/CourtPolicyMDEService.wsdl' wsdl. Place the resource correctly in the classpath.");
        }
        COURTPOLICYMDESERVICE_EXCEPTION = e;
    }

    public CourtPolicyMDEService() {
        super(__getWsdlLocation(), COURTPOLICYMDESERVICE_QNAME);
    }

    public CourtPolicyMDEService(WebServiceFeature... features) {
        super(__getWsdlLocation(), COURTPOLICYMDESERVICE_QNAME, features);
    }

    public CourtPolicyMDEService(URL wsdlLocation) {
        super(wsdlLocation, COURTPOLICYMDESERVICE_QNAME);
    }

    public CourtPolicyMDEService(URL wsdlLocation, WebServiceFeature... features) {
        super(wsdlLocation, COURTPOLICYMDESERVICE_QNAME, features);
    }

    public CourtPolicyMDEService(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public CourtPolicyMDEService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
        super(wsdlLocation, serviceName, features);
    }

    /**
     * 
     * @return
     *     returns CourtPolicyMDE
     */
    @WebEndpoint(name = "CourtPolicyMDE")
    public CourtPolicyMDE getCourtPolicyMDE() {
          QName qname = new QName("https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0WSDL/CourtPolicyMDE", "CourtPolicyMDE");
        return super.getPort(qname, CourtPolicyMDE.class);
    }

    /**
     * 
     * @param features
     *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
     * @return
     *     returns CourtPolicyMDE
     */
    @WebEndpoint(name = "CourtPolicyMDE")
    public CourtPolicyMDE getCourtPolicyMDE(WebServiceFeature... features) {
        return super.getPort(new QName("https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0WSDL/CourtPolicyMDE", "CourtPolicyMDE"), CourtPolicyMDE.class, features);
    }

    private static URL __getWsdlLocation() {
        if (COURTPOLICYMDESERVICE_EXCEPTION!= null) {
            throw COURTPOLICYMDESERVICE_EXCEPTION;
        }
        return COURTPOLICYMDESERVICE_WSDL_LOCATION;
    }

}

Within this method of the above class:

@WebEndpoint(name = "CourtPolicyMDE")
    public CourtPolicyMDE getCourtPolicyMDE() {
          QName qname = new QName("https://docs.oasis-open.org/legalxml-courtfiling/ns/v5.0WSDL/CourtPolicyMDE", "CourtPolicyMDE");
        return super.getPort(qname, CourtPolicyMDE.class);
    }

When executing under Tomcat 9 and JDK 8, why would this line:

return super.getPort(qname, CourtPolicyMDE.class);

produce this exception:

java.lang.IllegalStateException: Cannot create communicator instance: JAXB context has not been set.

Notes:

  • I have upgraded from Metro 2.3.1 to Metro 2.4.9 to get past a different issue with connecting to this web service in the same method.
  • I also pulled out the definition of qname from the generated code and placed it on its own line so I could identify exactly which statement of the method was causing the error.
  • My Tomcat environment is using the same version of Metro that was used for generation of the java classes via wsimport.
0

There are 0 best solutions below