[ 
https://issues.apache.org/activemq/browse/SM-811?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_37920
 ] 

Christian Schneider commented on SM-811:
----------------------------------------

I have attached a new patch.

The core is the method below where I build the Message from the message 
exchange.

The Soapaction is now set as: <interface namespace>/<interface name>/<operation 
name>
Or /<operation_name> if there is now interface_name.

I think using the interface name is better then the endpoint name. What do you 
think?

I have also refactored the startup in the processors and were able to kill some 
duplicate code. I hope I did not break anything.
The destination is now initialized in the startup code. I think this should not 
harm but do not know exactly.

When I think about it ... the method below should return a Message instead of 
TextMessage. I read in the soap binding document I linked that jms binding 
should use Bytes Messages. So we are more open for the future with just Message.

What do you think about the patch?

---
protected TextMessage createMessageFromExchange(Session session, 
MessageExchange exchange) throws Exception {
        TextMessage msg = session.createTextMessage();
        NormalizedMessage nm = exchange.getMessage("in");
        fromNMS(nm, msg);
        
        // Build the SoapAction from <interface namespace>/<interface 
name>/<operation name>
                String soapAction = "";
                if (exchange.getOperation()!= null) {
                        String interFaceName =
                                exchange.getInterfaceName()== null ? "" :
                                exchange.getInterfaceName().getNamespaceURI() + 
"/" + exchange.getInterfaceName().getLocalPart();
                        soapAction = interFaceName + "/" + 
exchange.getOperation();
                }
                msg.setStringProperty("SoapAction", soapAction);
                msg.setStringProperty("SOAPJMS_soapAction", soapAction);
                return msg;
    }

> servicemix-jms does not set SoapAction property for SOAP jms messages
> ---------------------------------------------------------------------
>
>                 Key: SM-811
>                 URL: https://issues.apache.org/activemq/browse/SM-811
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-jms
>    Affects Versions: 3.0, 3.0.1, 3.1
>         Environment: Tested with Tibco EMS as jms server and Tibco Business 
> works as system providing the service. The error should also occur with 
> ActiveMQ.
>            Reporter: Christian Schneider
>            Priority: Critical
>         Attachments: servicemix-jms-sm-811-2.patch, 
> servicemix-jms-sm-811.patch, servicemix-jsr181-sm-811.patch
>
>
> When tibco is the client all works well but when tibco implements the service 
> it rejects the soap/jms message as it wants the SoapAction jms property to be 
> set.
> I have added a dummy SoapAction in StandardProviderProcessor:
> ...
> MessageProducer producer = session.createProducer(destination);
>           TextMessage msg = session.createTextMessage();
> NormalizedMessage nm = exchange.getMessage("in");
> fromNMS(nm, msg);
> String soapAction = "default";
> msg.setStringProperty("SoapAction", soapAction);
> ...
> I was able to do a complete request/reply with tibco in this way. Of course 
> the "default" SoapAction will only help if my service has only one method.
> From what I see in Tibco the SoapAction should at least contain the method 
> name of the service being called. 
> The servicemix-jms component should by default set this property to make it 
> more compatible with other soap/jms compatible systems. 

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to