Hi,
I'm trying to use the dispatch API and while I can make the service call ok, 
the ws-address "action" header is wrong.  Here's my code:
          URL wsdlURL = new 
URL("file:/home/jpangburn/Desktop/IHE/XDSb.Support.Materials.v9/wsdl/XDS.b_DocumentRegistry.wsdl");
          Service service = Service.create(wsdlURL, new 
QName("urn:ihe:iti:xds-b:2007", "DocumentRegistry_Service"));
          Dispatch<StreamSource> disp = service.createDispatch(new 
QName("urn:ihe:iti:xds-b:2007", "DocumentRegistry_Port_Soap12"), 
StreamSource.class, Service.Mode.PAYLOAD, new AddressingFeature());
          InputStream is = 
IBServer.class.getResourceAsStream("RegistryQuery.xml");
          StreamSource request = new StreamSource(is);
          StreamSource response = disp.invoke(request);

Basically, I try to create a service from a WSDL with the service QName, then 
create a Dispatch from the port's QName while passing "new AddressingFeature()" 
to turn on WS-Addressing.  The action header comes out like this:
<Action 
xmlns="http://www.w3.org/2005/08/addressing";>http://cxf.apache.org/jaxws/dispatch/DocumentRegistry_PortType/InvokeRequest</Action>

This is wrong because the SOAP12 binding's operation has the following:
<soap12:operation soapAction="urn:ihe:iti:2007:RegistryStoredQuery"/>

So the header should be:
<Action 
xmlns="http://www.w3.org/2005/08/addressing";>urn:ihe:iti:2007:RegistryStoredQuery</Action>

All I can guess is that the Dispatch API doesn't know which operation I'm 
calling so it makes up this generic action header for the port instead of 
looking at the message I'm sending, determining the operation called, and 
grabbing the correct soap action to use in the action header.  Am I doing 
something wrong or is this a limitation in the Dispatch API's support for 
WS-Addressing?

Thanks,
Jesse

Reply via email to