| Summary: | BPEL process cannot directly consume WS-addressing enabled EBWS service when ESB-generated WSDL is used (with CXF installed) | ||
|---|---|---|---|
| Product: | [JBoss] JBoss Enterprise SOA Platform 5 | Reporter: | Filip Nguyen <fnguyen> |
| Component: | riftsaw | Assignee: | tcunning |
| Status: | CLOSED NEXTRELEASE | QA Contact: | |
| Severity: | urgent | Docs Contact: | |
| Priority: | urgent | ||
| Version: | 5.2.0.ER3 | CC: | fnguyen, gary.pi4tech, kevin.conner |
| Target Milestone: | --- | ||
| Target Release: | 5.2.0 GA, 5.2.0.ER5 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| URL: | http://jira.jboss.org/jira/browse/SOA-3386 | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2011-10-20 11:58:06 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
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. 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). 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?
The soap action is definitely a bug in ESB. Link: Added: This issue depends JBESB-3691 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. Release Notes Docs Status: Added: Not Required Writer: Added: dlesage Verified. With ER5 generated WSDL works. |
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 "")