Thank you for the reply Daniel. It is actually all working now using the example above.
I used wsdl2java to generate the Service class and it has the WebService annotation with an empty namespace. The .NET service I was calling did not like any namespaces so I thought by removing them from all annotations it would remove them from the web service call but that did not work. The transformation on the incoming and outgoing messages works a treat which is great. Thank you both for your help. Dan -----Original Message----- From: Daniel Kulp [mailto:[email protected]] Sent: May-02-11 11:05 PM To: [email protected] Cc: dan_emsat Subject: Re: Removing namespaces from CXF client messages On Monday, May 02, 2011 8:21:19 AM dan_emsat wrote: > Hi There, > > I have searched the forums for an answer to this question and have made > some headway but I have yet to find a solution. > > I have developed a CXF client to call a .NET service from a 3rd party. I > want to remove the namespaces from the call to the web service by either > using an interceptor or by configuring JAXB within the method but I have > not been able to do so. I am purely using CXF 2.3.3 and JDK6 without any > other frameworks to keep it simple. This looks like your Service.class isn't properly or fully annotated. Most likely, if you add a @WebService annotation on there with a targetNamespace of what you need, it would change significantly. Dan > > Here is the client code: > > JaxWsProxyFactoryBean proxyFactory = new > JaxWsProxyFactoryBean(); > proxyFactory.setServiceClass(cxf.Service.class); > proxyFactory.setAddress("http://localhost:14623/Demo/ServerService.svc"); > cxf.Service port = (cxf.Service) proxyFactory.create(); > // Set up Authentication > Authenticator.setDefault(new MyAuthenticator()); > Client client = ClientProxy.getClient(port); > > // Out interceptor to remove namespaces > client.getOutInterceptors().add(new MyOutInterceptor()); > > // Set up HTTP client parameters to allow NTLM authentication > HTTPConduit http = (HTTPConduit) client.getConduit(); > HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); > httpClientPolicy.setConnectionTimeout(36000); > httpClientPolicy.setAllowChunking(false); > httpClientPolicy.setReceiveTimeout(32000); > http.setClient(httpClientPolicy); > > // Object factory to generate objects for service call > ObjectFactory factory = new ObjectFactory(); > ServerSchemas newSchemas = factory.createServerSchemas(); > Demo newDemo = factory.createSchemasDemo(); > newDemo.setName("New name"); > newDemo.setDescription("New description"); > newDemo.setValue(926); > newSchemas.getEmsatDemo().add(newDemo); > > // Convert objects to xml string > JAXBContext context = JAXBContext.newInstance(ServerSchemas.class); > Marshaller marshaller = context.createMarshaller(); > marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); > StringWriter output = new StringWriter(); > XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(output); > MyStreamWriter teamsWriter = new MyStreamWriter(writer); > > marshaller.marshal(newSchemas, teamsWriter); > final String xmlPayload = output.toString(); > > Success reply = port.thirdPartyServerService("DemoImport", xmlPayload, > null); > System.out.println("Server said: " + reply.getSuccessMessages()); > > The out interceptor looks like this: > > public class MyOutInterceptor extends AbstractPhaseInterceptor { > > public MyOutInterceptor() { > super(Phase.MARSHAL); > } > > public void handleMessage(Message outMessage) { > XMLStreamWriter writer = new > MyStreamWriter(StaxUtils.createXMLStreamWriter(outMessage.getContent(Output > Stream.class))); outMessage.setContent(MyStreamWriter.class, writer); > } > > } > > MyStreamWriter implements XMLStreamWriter. I originally extended the > DelegatingXMLStreamWriter but when it did not work I tried implementing the > Stream writer myself. > > http://svn.apache.org/repos/asf/cxf/trunk/common/common/src/main/java/org/a > pache/cxf/staxutils/DelegatingXMLStreamWriter.java > > Each time I call the web service the XML generated includes namespaces as > in > > > <ns3:ThirdPartyServerService > xmlns:ns2="http://schemas.datacontract.org/2004/07/SourceEdge.BAEntities" > xmlns:ns3="http://cxf/" > xmlns:ns4="http://schemas.microsoft.com/2003/10/Serialization/Arrays" > xmlns:ns5="http://schemas.datacontract.org/2004/07/SourceEdge.BAStudio.BARu > ntimeModel" > xmlns:ns6="http://schemas.microsoft.com/2003/10/Serialization/"> > > Basically I want to remove the ns3 from the beginning of the call here and > the namespaces are not necessary either to they can be removed as well but > the main thing it to get rid of the ns3 as the .NET service does not like > it. > > I see there is a TransformFeature in CXF but I do not see any examples on > how to configure this in my client method above. Also my Out interceptor > does not seem to have any effect on the outgoing message. > > Any pointers, help, pointers to examples are appreciated. If you need any > further information let me know. > > Thanks in advance. > > -- > View this message in context: > http://cxf.547215.n5.nabble.com/Removing-namespaces-from-CXF-client-messag > es-tp4364564p4364564.html Sent from the cxf-user mailing list archive at > Nabble.com. -- Daniel Kulp [email protected] http://dankulp.com/blog Talend - http://www.talend.com
