Thanks for sharing your solution.
Regards
Freeman
On 2012-1-10, at 下午6:12, Rafal Janik wrote:
Of course it was a problem with my understanding of xpath in camel.
local-name(/soap:Envelope/soap:Body/*[1])='getCommunitiesRequest'
works but this xpath must be invoked on NameSpace object with soap
prefix defined:
Namespaces ns = new Namespaces("soap", "http://schemas.xmlsoap.org/soap/envelope/
");
...
from(...)
.choice()
.when(ns.xpath( local-name(/soap:Envelope/soap:Body/
*[1])='getCommunitiesRequest'))
and now everything is ok...
On 05.01.2012 15:02, Rafal Janik wrote:
Thanks for your reply- it is reason why there are double tags.
I've done it that way because when there is
useJBIWrapper="false"
useSOAPEnvelope="false"
in provider and consumer - the target of provider can't recognize
the message - there are double tags in request.
In second case :
useJBIWrapper="false"
useSOAPEnvelope="true">
I don't know why my xpath expression doesn't work, there is a
payload:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/
envelope/" xmlns:heal="http://myservice/
aaa"><soap:Body><heal:getCommunitiesRequest xmlns:heal="http://myservice/aaa
">
<heal:dataSourceId>1</heal:dataSourceId>
</heal:getCommunitiesRequest></soap:Body></soap:Envelope>
org.apache.cxf.interceptor.Fault: Invalid xpath: local-name(/
soap:Envelope/soap:Body/*[1])='getCommunitiesRequest'. Reason:
javax.xml.xpath.XPathExpressionException
but local-name(/soap:Envelope/soap:Body/
*[1])='getCommunitiesRequest' I think is correct.
In my wrong configuration with false,false for consumer and
false,true for provider the payload was just
<heal:getCommunitiesRequest xmlns:heal="http://myservice/aaa">
<heal:dataSourceId>1</heal:dataSourceId>
</heal:getCommunitiesRequest>
so the xpath was simpler : local-name(/*[1])='getCommunitiesRequest'
and it worked...
So what - am I doing something wrong with xpath? should I do
something else with soap namespaces in serviecemix and camel?
On 05.01.2012 14:26, Freeman Fang wrote:
Hi,
Your cxfbc consumer and provider endpoint configuration mismatch,
The provider is
useJBIWrapper="false"
useSOAPEnvelope="true"
The consumer is
useJBIWrapper="false"
useSOAPEnvelope="false"
You should keep those same.
Freeman
On 2012-1-5, at 下午9:01, Rafal Janik wrote:
Hi,
I've got a problem with double <soap:Envelope> and <soap:Body>
tags in my cxf bc component.
The idea of my my sa is to translate a message from one soap
format to another.
The cxfbc configuration:
<cxfbc:provider wsdl="classpath:service_v1.wsdl"
locationURI="http://localhost:8080/my-ws/ws"
interfaceName="aaa:ImplPort2"
service="aaa:myService"
endpoint="ImplPort"
useJBIWrapper="false"
useSOAPEnvelope="true">
</cxfbc:provider>
<cxfbc:consumer wsdl="classpath:service_v2.wsdl"
targetService="test:AdapterService"
targetEndpoint="myEndpoint"
useJBIWrapper="false"
useSOAPEnvelope="false"
locationURI="https://0.0.0.0:8190/test/testService/
"
busCfg="ssl.xml">
</cxfbc:consumer>
Then I use camel and processors to translate the message:
from("jbi:endpoint:http://test.pl/test/RoleAnalyzerAdapterService/RoleAnalyzerEndpoint
")
.to("log:entrance")
.choice()
.when(xpath(PROPER_METHOD_INVOKED)))
.process(new MyTranslator())
.to("jbi:endpoint:{cxf-bc-provider_endpoint}")
.otherwise()
.to("log:wrong_request")
.setBody
(constant(SoapResponseMessages.WRONG_METHOD));
and as a result I get almost good soap (but packed again in
soap:Envelope/soap:Body):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
">
<soap:Body>
<soap:Envelope>
<soap:Body>
<!--response here -->
</soap:Body>
</soap:Envelope>
</soap:Body>
</soap:Envelope>
Am I doing something wrong, maybe the component should be
configured in other way or should I use a processor for getting
the body from response and then send it back?
apache-servicemix 3.6.0-fuse-00-35
---------------------------------------------
Freeman Fang
FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
--
<mime-attachment.gif>
Rafał Janik
Software Engineer
Software Mind SA
ul. Bociana 22A
31-231 Krakow
Polska
Tel. +48 12 252 34 00
Fax: +48 12 252 34 01
Mobile:+48 668 48 36 13
[email protected]
www.softwaremind.pl
Software Mind SA z siedzibą w Krakowie przy ul. Bociana 22A, 31-231
Krakow
NIP 9452012822, kapitał zakładowy PLN 500,000.00 (w całości
wpłacony), KRS 0000300409
Sąd Rejonowy dla Krakowa Śródmieścia w Krakowie, XI Wydział
Gospodarczy KRS
Ta wiadomość może zawierać materiały poufne i objęte
tajemnicą zawodową, do wyłącznego użytku odbiorcy (odbiorców).
Surowo wzbronione są wszelkie zmiany, wykorzystywanie,
przechowywanie, dystrybucja lub ujawnienie przez inne osoby. Jeśli
nie jest Pan/Pani zamierzonym odbiorcą (lub osobą upoważnioną do
odbioru w imieniu odbiorcy), prosimy o kontakt z nadawcą przez
wiadomość zwrotną oraz usunięcie wszelkich kopii niniejszej
wiadomości. Poza tym poczta elektroniczna jest podatna na
uszkodzenia danych, przechwytywanie, sabotaż, nieupoważnione
zmiany i wirusy. Wysyłamy i odbieramy wiadomości poczty
elektronicznej wyłącznie na takiej zasadzie, że nie ponosimy
odpowiedzialności za jakiekolwiek tego typu uszkodzenia,
przechwycenia, sabotaż, zmiany lub wirusy, ani jakichkolwiek
konsekwencje tego typu okoliczności.
--
<minism.gif>
Rafał Janik
Software Engineer
Software Mind SA
ul. Bociana 22A
31-231 Krakow
Polska
Tel. +48 12 252 34 00
Fax: +48 12 252 34 01
Mobile:+48 668 48 36 13
[email protected]
www.softwaremind.pl
Software Mind SA z siedzibą w Krakowie przy ul. Bociana 22A, 31-231
Krakow
NIP 9452012822, kapitał zakładowy PLN 500,000.00 (w całości
wpłacony), KRS 0000300409
Sąd Rejonowy dla Krakowa Śródmieścia w Krakowie, XI Wydział
Gospodarczy KRS
Ta wiadomość może zawierać materiały poufne i objęte tajemnicą
zawodową, do wyłącznego użytku odbiorcy (odbiorców). Surowo
wzbronione są wszelkie zmiany, wykorzystywanie, przechowywanie,
dystrybucja lub ujawnienie przez inne osoby. Jeśli nie jest Pan/Pani
zamierzonym odbiorcą (lub osobą upoważnioną do odbioru w imieniu
odbiorcy), prosimy o kontakt z nadawcą przez wiadomość zwrotną
oraz usunięcie wszelkich kopii niniejszej wiadomości. Poza tym
poczta elektroniczna jest podatna na uszkodzenia danych,
przechwytywanie, sabotaż, nieupoważnione zmiany i wirusy. Wysyłamy
i odbieramy wiadomości poczty elektronicznej wyłącznie na takiej
zasadzie, że nie ponosimy odpowiedzialności za jakiekolwiek tego
typu uszkodzenia, przechwycenia, sabotaż, zmiany lub wirusy, ani
jakichkolwiek konsekwencje tego typu okoliczności.
---------------------------------------------
Freeman Fang
FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com