Bug 780923 (SOA-3386) - BPEL process cannot directly consume WS-addressing enabled EBWS service when ESB-generated WSDL is used (with CXF installed)
Summary: BPEL process cannot directly consume WS-addressing enabled EBWS service when ...
Keywords:
Status: CLOSED NEXTRELEASE
Alias: SOA-3386
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: riftsaw
Version: 5.2.0.ER3
Hardware: Unspecified
OS: Unspecified
urgent
urgent
Target Milestone: ---
: 5.2.0 GA,5.2.0.ER5
Assignee: tcunning
QA Contact:
URL: http://jira.jboss.org/jira/browse/SOA...
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2011-09-19 12:03 UTC by Filip Nguyen
Modified: 2011-10-20 11:58 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2011-10-20 11:58:06 UTC
Type: Bug


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker SOA-3386 0 None None None Never

Description Filip Nguyen 2011-09-19 12:03:18 UTC
Steps to Reproduce:  * Take bpel_invoke_esb_ebws quickstart
 * turn on addressing (jboss-esb.xml: set addressing="true" on service]
 * copy WSDL fragment from generated EBWS service into bpelContent/CreditAgency.wsdl)
project_key: SOA

I have CXF installed. When I expose EBWS service with addressing="true" then following WSDL is generated:
{code:title=CreditAgency.wsdl|borderStyle=solid}
...
<wsdl:operation name="CreditAgencyServiceOp">

<wsdl:input message="tns:CreditAgencyServiceReq" name="CreditAgencyServiceReq" wsaw:Action="http://soa.jboss.org/CreditServices/CreditAgencyServiceOp">
    </wsdl:input>

<wsdl:output message="tns:CreditAgencyServiceRes" name="CreditAgencyServiceRes" wsaw:Action="http://soa.jboss.org/CreditServices/CreditAgencyServiceOpResp">
    </wsdl:output>
...
<soap:operation soapAction="http://soa.jboss.org/CreditServices/CreditAgencyServiceOpResp"/>
...
{code} 

Then when I try to take this WSDL and let BPEL process to invoke the CreditAgencyServiceOp operation it fails because BPEL process generates HTTP request with header:
SOAPAction: "http://soa.jboss.org/CreditServices/CreditAgencyServiceOpResp"\r\n

But in the SOAP envelope it inserts:
{code:title=SOAP action header generated by bpel|borderStyle=solid}
<Action xmlns=\"http://www.w3.org/2005/08/addressing\">
http://soa.jboss.org/ebws/HelloWorldEBWSOp
</Action>
{code}

This fails because SOAPAction should be the same as Action header (according to [WS-Addressing SOAP Binding |http://www.w3.org/TR/2006/REC-ws-addr-soap-20060509/#s11extdesc] 4.2: The field-value of the SOAPAction HTTP request header MUST either be the value of the [action] property enclosed in quotation marks, or the empty value "")

Comment 1 Kevin Conner 2011-09-19 12:50:53 UTC
The To element represents the endpoint and not the action, what is the complete envelope?

The purpose of specifying the SOAPAction header is to provide the endpoint with a shortcut to identify the task without having to process the SOAP request.

Comment 2 Filip Nguyen 2011-09-19 14:59:22 UTC
Yes. Sorry I meant to insert "Action" header no "To" header. Yes, from what I understand the SOAPAction http header is not mandatory, but if it is present the value has to be same as the Action header from WSAddressing, which is not when using ebws generated wsdl (one has to modify the wsdl - change SOAPAction to http://soa.jboss.org/ebws/HelloWorldEBWSOp to get it working, which is in my opinion bug).

Comment 3 Gary Brown 2011-09-28 10:50:23 UTC
The wsdl created by the ebws service generates the following fragment:

{code:xml}
<wsdl:portType name="CreditAgencyServicePortType">
  <wsdl:operation name="CreditAgencyServiceOp">
    <wsdl:input message="tns:CreditAgencyServiceReq" name="CreditAgencyServiceReq" wsaw:Action="http://soa.jboss.org/CreditServices/CreditAgencyServiceOp">
    </wsdl:input>
    <wsdl:output message="tns:CreditAgencyServiceRes" name="CreditAgencyServiceRes" wsaw:Action="http://soa.jboss.org/CreditServices/CreditAgencyServiceOpResp">
    </wsdl:output>
....
  </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="CreditAgencyServiceBinding" type="tns:CreditAgencyServicePortType">
  <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  <wsaw:UsingAddressing wsdl:required="true"/>
  <wsdl:operation name="CreditAgencyServiceOp">
    <soap:operation soapAction="http://soa.jboss.org/CreditServices/CreditAgencyServiceOpResp"/>
    <wsdl:input name="CreditAgencyServiceReq">
      <soap:body use="literal"/>
    </wsdl:input>
{code}

Note that the soapAction in the wsdl:binding/wsdl:operation element is the one associated with the response, as defined in the wsdl:output element above.

If this soapAction is changed to be the value associated with the request, then it works.

So I think the problem is that the wsdl created by the ebws service is incorrect?


Comment 4 Kevin Conner 2011-09-28 12:37:33 UTC
The soap action is definitely a bug in ESB.

Comment 5 Kevin Conner 2011-09-28 12:51:18 UTC
Link: Added: This issue depends JBESB-3691


Comment 6 tcunning 2011-10-03 20:11:31 UTC
The initial SOAP action URI is now set to the request, not the response.   This change will be in ER5.

tcunning@localhost:rosetta]$ svn commit
Sending        rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java
Transmitting file data .
Committed revision 37500.


Comment 7 David Le Sage 2011-10-04 01:03:47 UTC
Release Notes Docs Status: Added: Not Required
Writer: Added: dlesage


Comment 8 Filip Nguyen 2011-10-20 11:58:06 UTC
Verified. With ER5 generated WSDL works.


Note You need to log in before you can comment on or make changes to this bug.