On Wednesday 14 July 2010 1:02:37 pm Vanore, Gregory wrote: > Maybe I'm missing something, but I don't see how to get the > JAXBDataBinding in there. I'm not creating a jaxws:client or > jaxws:endpoint declaration in my configuration, so I can't pass the bean > into anything. I've been looking at the beans through the debugger, and > at some level there is a bean that holds a ServiceImpl where I could set > the JAXBDataBinding, but I don't see a publically accessible way to > retrieve the field without starting at the CXF API level. Can I set > some magic property in the request context?
Doesn't look like a way, no. I think the only way to do this is either via config or by dropping into CXF api's. That said, you can use a combination of the @DataBinding interface with configuration to ONLY configure a JAXBDataBinding object and not all the jaxws:client/jaxws:endpoint things and such. In the config, create/define the object and then in the annotation, use the ref=".." attribute to refer to it by id. Dan > > -----Original Message----- > From: Daniel Kulp [mailto:[email protected]] > Sent: Saturday, July 03, 2010 1:45 PM > To: [email protected] > Cc: Vanore, Gregory > Subject: Re: Customize JAXB namespace prefixes for JAXWS API created > endpoints > > > Any chance you could create a simple testcase that shows this. It > should > definitely be allowed to define (or redefine) the namespace there. The > output > may not be perfectly what you want, but it should work. > > Dan > > On Thursday 01 July 2010 10:50:50 am Vanore, Gregory wrote: > > I see in the documentation how to use a JAXBDataBinding to customize > > namespace prefixes for endpoints that I enumerate through the Spring > > configuration mechanism. I have a client that is strictly using the > > JAX-WS API to create services: Service.create(...) and then > > service.getPort(...). > > > > When I create a W3CEndpointReference, extra namespaces are injected > > into > > > it: > > > > <EndpointReference xmlns="http://www.w3.org/2005/08/addressing"> > > > > <Address>http://localhost:8888/test</Address> > > <ReferenceParameters> > > > > <elem xmlns="" > > > > xmlns:ns2="http://www.w3.org/2005/08/addressing" > > xmlns:wsa="http://www.w3.org/2005/08/addressing">test</elem> > > > > </ReferenceParameters> > > <Metadata/> > > > > </EndpointReference> > > > > The problem comes when I set this into my request message. JAXB tries > > to utilize ns2, and then declares a collision when it encounters the > > > > endpoint reference, such as: > > W3CEndpointReference epr = > > eprBuilder.address("http://localhost:8888/test").referenceParameter(e).b > > > uild(); > > > > SubscribeService request = new SubscribeService(); > > request.setTopic("theTopic"); > > request.setConsumerReference(epr); > > ServiceResponse response = service().subscribeTo(request); //no > > > > luck > > > > javax.xml.ws.soap.SOAPFaultException: The namespace > > xmlns:ns2="http://service.com/service" could not be added as a > > namespace > > > to "elem": The namespace prefix "ns2" > > > > I feel the best strategy is to use the namespace mapping to fix > > certain > > > common URLs to specific prefixes. If you have other ideas I'll > > certainly listen... > > > > Thanks, > > Greg -- Daniel Kulp [email protected] http://dankulp.com/blog
