Shaun Montgomery created CXF-4626:
-------------------------------------
Summary: JAXB Marshalling error class not known to this context
Key: CXF-4626
URL: https://issues.apache.org/jira/browse/CXF-4626
Project: CXF
Issue Type: Bug
Components: JAXB Databinding
Affects Versions: 2.5.4
Environment: Windows 7, Netbeans 7.1.2,
Reporter: Shaun Montgomery
I am trying to update a web service client and change it from using
pregenerated classes using wsdl2java to dynamically loading the wsdl and
creating the client. The application needs to dynamically load the request and
response structures and uses java reflection to display the contents of the
response. I use the following code to create the dynamic client:
JaxWsDynamicClientFactory dcf =
JaxWsDynamicClientFactory.newInstance();
Logger.getLogger(AXAddressService.class.getName()).log(Level.INFO,"Dynamically
loading wsdl from " + theWsdlLocation);
ClassLoader clBefore =
Thread.currentThread().getContextClassLoader();
dynClient = dcf.createClient(theWsdlLocation, bindingFileList);
if (dynClient == null) {
Logger.getLogger(AXAddressService.class.getName()).log(Level.SEVERE,"dynClient
creation not successful");
} else {
Logger.getLogger(AXAddressService.class.getName()).log(Level.INFO,"Successful
creation of service client from wsdl at " + theWsdlLocation);
}
Bus bus = ((EndpointImpl) dynClient.getEndpoint()).getBus();
PolicyInterceptorProviderRegistry pipr =
bus.getExtension(PolicyInterceptorProviderRegistry.class);
pipr.register(new XRMAuthPolicyProvider());
http = (HTTPConduit) dynClient.getConduit();
// ************************
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);
I then use the following code to invoke the read method on the service:
Class asrReqClass =
Class.forName("com.microsoft.schemas.dynamics._2008._01.services.AddressServiceReadRequest");
Object asrReq = asrReqClass.newInstance();
EntityKeyList ekl = CreateEntityKeyList(keys);
Method setEntityKeyListMethod =
asrReq.getClass().getMethod("setEntityKeyList", EntityKeyList.class);
setEntityKeyListMethod.invoke(asrReq, ekl);
Object [] asrRespObjs = dynClient.invoke("read", asrReq);
I have also tried to use the context loader to load the asrReq class.
If I add code to create a JAXBContext, I am able to marshall the asrReq class
correctly.
The Exception I am getting is:
Nov 9, 2012 9:58:06 AM org.apache.cxf.phase.PhaseInterceptorChain
doDefaultLogging
WARNING: Interceptor for
{http://schemas.microsoft.com/dynamics/2008/01/services}AddressService#{http://schemas.microsoft.com/dynamics/2008/01/services}read
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Marshalling Error:
com.microsoft.schemas.dynamics._2008._01.services.AddressServiceReadRequest is
not known to this context
at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.java:261)
at org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)
...
I would really appreciate some help with this. I've already spent too much
time trying to figure it out and a solution is critical.
Thanks in advance.
Shaun
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira