Hello Alexandre,
maybe you can write your own mediator which has full access to the soap
message. Then you can use the axiom model to get the attribute of the
root-element and change the value of the prefix. I think, this has to
work. Maybe you can use the build-in-mediators for doing that.
A good start is http://wso2.org/library/2898 for writing own mediators.
Bye,
Jens
alexandre_garino schrieb:
Hi,
I experience a new issue. Let me explain once again what I want to achieve
before going deeper.
Components Diagram
SoapUI (as consumer) -- HTTP --> ESB (dealing with WS-Security Specs) --
HTTPS --> Web Service (implemented in .Net)
Issue Description
If I try to consume the web service through the ESB with SoapUI I never get
a response from the ESB. The ESB console outputs this kind of message:
2008-04-09 18:50:58,984 [10.130.30.202-ddmorginweb] [HttpClientWorker-1]
WARN SynapseCallbackReceiver Synapse received a response for the request
with message Id : urn:uuid:f17b562f-a619-42ee-ae61-6c5a0d24bde8 But a
callback is not registered (anymore) to process this response
SOAP messages exchanged between components follow:
SOAP Message sent by SoapUI
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
[Not disclosed for security concerns]
</soapenv:Body>
</soapenv:Envelope>
SOAP Message sent by the ESB (WSDoAllSender)
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsa:To>[Not disclosed for security concerns]</wsa:To>
<wsa:MessageID>urn:uuid:6B27C12D9152A7EA33692465354606522-515329868</wsa:MessageID>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
</soapenv:Header>
<soapenv:Body>
[Not disclosed for security concerns]
</soapenv:Body>
</soapenv:Envelope>
SOAP Message sent by the ESB (Rampart)
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
soapenv:mustUnderstand="1">
<wsu:Timestamp
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="Timestamp-3853415">
<wsu:Created>2008-04-09T15:50:57.062Z</wsu:Created>
<wsu:Expires>2008-04-09T15:55:57.062Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="UsernameToken-27471524">
<wsse:Username>[Not disclosed for security
concerns]</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">[Not
disclosed for security concerns]</wsse:Password>
<wsse:Nonce>GT9CvQZckbZSBtKNJabPMg==</wsse:Nonce>
<wsu:Created>2008-04-09T15:50:57Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:To>[Not disclosed for security concerns]</wsa:To>
<wsa:MessageID>urn:uuid:6B27C12D9152A7EA33692465354606522-515329868</wsa:MessageID>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
</soapenv:Header>
<soapenv:Body>
[Not disclosed for security concerns]
</soapenv:Body>
</soapenv:Envelope>
SOAP Message received by the ESB (Rampart)
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
<wsa:MessageID>urn:uuid:2ad8950e-48a5-4a74-8d99-ad76cc7fc74c</wsa:MessageID>
<wsa:RelatesTo>urn:uuid:f17b562f-a619-42ee-ae61-6c5a0d24bde8</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp
wsu:Id="Timestamp-f045a341-b821-4a80-a806-6bebad91c4ef">
<wsu:Created>2008-04-09T15:52:55Z</wsu:Created>
<wsu:Expires>2008-04-09T15:57:55Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
[Not disclosed for security concerns]
</soap:Body>
</soap:Envelope>
SOAP Message received by the ESB (WSDoAllReceiver)
<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
<wsa:MessageID>urn:uuid:2ad8950e-48a5-4a74-8d99-ad76cc7fc74c</wsa:MessageID>
<wsa:RelatesTo>urn:uuid:f17b562f-a619-42ee-ae61-6c5a0d24bde8</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp
wsu:Id="Timestamp-f045a341-b821-4a80-a806-6bebad91c4ef">
<wsu:Created>2008-04-09T15:52:55Z</wsu:Created>
<wsu:Expires>2008-04-09T15:57:55Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
[Not disclosed for security concerns]
</soap:Body>
</soap:Envelope>
SOAP Message received by SoapUI
None
Leads
I noticed that the .net web service (proprietary) fills the RelatesTo
element with a new UUID, I suppose that a valid ID should be the MessageID
element sent by Rampart. So the ESB can't find the callback related to and
this is why SoapUI never gets back the response.
I implemented a .Net client in order to trace messages exchanged.
Request
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
<wsa:MessageID>urn:uuid:e27c9c99-1488-45f7-9992-f76e70769908</wsa:MessageID>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:To>[Not disclosed for security concerns]</wsa:To>
<wsse:Security soap:mustUnderstand="1">
<wsu:Timestamp
wsu:Id="Timestamp-2943ec42-b0d1-4853-a2c5-a97caa3bd946">
<wsu:Created>2008-04-10T08:36:11Z</wsu:Created>
<wsu:Expires>2008-04-10T08:41:11Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
wsu:Id="SecurityToken-f1f7951a-ea82-4a41-8627-72dd9aa7be0c">
<wsse:Username>********</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">********</wsse:Password>
<wsse:Nonce>RBjvPCovI6C7M8VNct15KQ==</wsse:Nonce>
<wsu:Created>2008-04-10T08:36:11Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
[Not disclosed for security concerns]
</soap:Body>
</soap:Envelope>
Response
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>[Not disclosed for security concerns]</wsa:Action>
<wsa:MessageID>urn:uuid:a51b94d7-998e-4bd2-b641-834b437ccf03</wsa:MessageID>
<wsa:RelatesTo>urn:uuid:e27c9c99-1488-45f7-9992-f76e70769908</wsa:RelatesTo>
<wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To>
<wsse:Security>
<wsu:Timestamp
wsu:Id="Timestamp-dc029518-1378-438c-81ad-49dd1ff66d1c">
<wsu:Created>2008-04-10T08:38:08Z</wsu:Created>
<wsu:Expires>2008-04-10T08:43:08Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
[Not disclosed for security concerns]
</soap:Body>
</soap:Envelope>
As we can see, the RelatesTo element is correct when I concume the web
service from a .net client. After many tests I know that the issue is
related to the namespace used for addressing. The request should utilize
http://schemas.xmlsoap.org/ws/2004/08/addressing instead of
http://www.w3.org/2005/08/addressing.
Consequently the question resolving this issue is: How do i do to change the
namespace by the correct one for each request sent by the ESB (and for this
specific proxy if possible)? Could I enforce the addressing namespace via
the WS-Policy file?
Regards,
Alexandre