Question

I have a .net server hosting some webservices.

I am making a Java client. I used Apache CFX to autocreate some useful classes based on the given wsdl file.

However, when I make the call in Java to the webservice I get the following error:

Exception in thread "Thread-3" javax.xml.ws.soap.SOAPFaultException: The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://localhost/MyService:ManualAddress. The InnerException message was 'There was an error deserializing the object of type Company.Product.Application.Services.DataContracts.LetterProcessManualAddress. The '/' character, hexadecimal value 0x2F, cannot be included in a name. Line 1, position 2119.'.  Please see InnerException for more details.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(Unknown Source)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at $Proxy37.processEnrollmentTraditionalDeficiency(Unknown Source)
at com.parc.peimage.PEFormViewer$3.run(PEFormViewer.java:2582)
at java.lang.Thread.run(Unknown Source)

Manual address is a JAXBElement, and my XML is not being created properly because of this error.

This is my code for creating the Address:

// SET manual address variables
com.parc.SomeCompanyAPI.Address MA;
MA = new Address();
MA.setAddressInCareOfName(new JAXBElement <String>  (new QName("http://example.com/SampleService"), String.class, "MyName"));
MA.setAddressLineOne(new JAXBElement <String>  (new QName("http://example.com/SampleService"), String.class, "MyAdd1"));
MA.setAddressLineTwo(new JAXBElement <String> (new QName("http://example.com/SampleService"), String.class, "MyAdd2"));
MA.setCity(new JAXBElement <String> (new QName("http://example.com/SampleService"), String.class, "MyAdd3"));
MA.setStateCode(new JAXBElement <String> (new QName("http://example.com/SampleService"), String.class, "MyAdd4"));
MA.setZipCode(new JAXBElement <String> (new QName("http://example.com/SampleService"), String.class, "MyAdd5"));
JAXBElement <Address> majax = new JAXBElement <Address> (new QName("http://example.com/SampleService"), Address.class, MA);
letter.setAddress(majax);
JAXBElement <String> provider = new JAXBElement<String>(new QName("http://example.com/SampleService"), String.class, "bob");
letter.setProviderName(provider);

Thanks in advance!

Was it helpful?

Solution

It seems strange to me that CXF would generate setters taking a JAXBElement instead of a string. A possible solution to that can be found in this answer, the generateElementProperty attribute is further documented in a WSIT Tutorial.

The exception you are getting here is because you are using the wrong constructor for QName, you should specify both the namespace URI and the local name of the element as parameters.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top