Hi,
I'm currently trying to get MessageContext.WSDL_OPERATION property value from the MessageContext passed in JAX-WS handlers. This is basically what was described in https://issues.apache.org/jira/browse/CXF-1698 . It's not clear to me whether any change was actually made for that issue, but basically I think that's not working yet and I'm wondering if you would be fine with me setting the property above (as well as the WSDL_SERVICE, WSDL_INTERFACE, etc.) in the SOAPHandlerInInterceptor just before starting dealing with the jaxws handlers. That of course would be done only when the current exchange already has the current OperationInfo, calling a method similar to what is currently in RPCInInterceptor (which runs after the jaxws handlers and currently sets those props only when getting the operation from its own private getOperation(..) method):

private void setMessage(Message message,
                            BindingOperationInfo operation) {
       Exchange ex = message.getExchange();
       ex.put(BindingOperationInfo.class, operation);
       ex.put(OperationInfo.class, operation.getOperationInfo());
       ex.setOneWay(operation.getOperationInfo().isOneWay());

//Set standard MessageContext properties required by JAX_WS, but not specific to JAX_WS.
       message.put(Message.WSDL_OPERATION, operation.getName());

       ServiceInfo si = operation.getBinding().getService();
       QName serviceQName = si.getName();
       message.put(Message.WSDL_SERVICE, serviceQName);

       QName interfaceQName = si.getInterface().getName();
       message.put(Message.WSDL_INTERFACE, interfaceQName);

EndpointInfo endpointInfo = ex.get(Endpoint.class).getEndpointInfo();
       QName portQName = endpointInfo.getName();
       message.put(Message.WSDL_PORT, portQName);

URI wsdlDescription = endpointInfo.getProperty("URI", URI.class);
       if (wsdlDescription == null) {
           String address = endpointInfo.getAddress();
           try {
               wsdlDescription = new URI(address + "?wsdl");
           } catch (URISyntaxException e) {
               //do nothing
           }
           endpointInfo.setProperty("URI", wsdlDescription);
       }
       message.put(Message.WSDL_DESCRIPTION, wsdlDescription);
} This would basically allow jaxws handlers to access those properties in most of the cases.

Cheers
Alessio

--
Alessio Soldano
Web Service Lead, JBoss

Reply via email to