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.