Hi,
Answer in line:
1) the http su:
I used this tutorial
(http://cwiki.apache.org/SM/704-intermediate-configuring-the-http-consumer-su.html)
1a) I change the name in the pom.xml to "Wsdl distant :: IN HTTP SU" and add
the dependency:
<dependency>
<groupId>org.apache.servicemix</groupId>
<artifactId>servicemix-core</artifactId>
<version>${servicemix-version}</version>
</dependency>
Be careful, if you want to use the HTTP component, you need to add the
servicemix-http dependency in your pom.xml like this:
<dependency>
<groupId>org.apache.servicemix</groupId>
<artifactId>servicemix-http</artifactId>
<version>2009.01</version>
</dependency>
Basicly, you don't need the servicemix-core dependency in your SU.
1b) And then I set the xbean.xml to:
<beans xmlns:http="http://servicemix.apache.org/http/1.0"
xmlns:ex="http://www.servicemix.org/example">
<http:endpoint service="myService:my-service-http"
endpoint="myService:my-service-http-endpoint"
targetService="myService:my-service-camel"
targetEndpoint="camel-in"
locationURI="http://0.0.0.0:8181/myService" />
</beans>
by the way, I have a question in my mind :
1c) what is the difference between http:endpoint and http:consumer ? (I
tried to use http:endpoint but it wasn't working)
The HTTP component supports two kinds of endpoint: the old fashion and
the new one.
The old fashion uses the http:endpoint notation and the component role
is defined using the role attribute (consumer or provider). You can find
the old fashion documentation here:
http://servicemix.apache.org/servicemix-http.html.
This usage should be deprecated soon.
On the other hand, the new fashion uses http:consumer and http:provider
notation and define the component role.
You can find the new fashion documentation here:
http://servicemix.apache.org/servicemix-http-new-endpoints.html.
In your case, I think that the usage of the http:endpoint is not correct
as you haven't define the role attribute.
------------------------------------------------------------
2) the camel se:
I used this tutorial
(http://servicemix.apache.org/32-using-the-camel-java-dsl-for-the-first-time.html)
2a) I change the name in the pom.xml to "Wsdl distant :: CAMEL SE SU"
2b) I change the camel-context.xml with :
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<package>org.apache.servicemix.test3</package>
</camelContext>
2c) I change the org.apache.servicemix.test3.MyRouteBuilder.java
I add the line from("ex:httphandler").to("log:tutorial"); in the configure
method (just to test the two components)
------------------------------------------------------------
3a) I create the Service assembly
TestWsdlDistant3> mvn archetype:create
-DarchetypeArtifactId=servicemix-service-assembly
-DarchetypeGroupId=org.apache.servicemix.tooling
-DartifactId=wsdl-distant-sa
3b) I add the http and camel SU dependencies in the pom.xml file
<dependency>
<groupId>org.apache.servicemix.test3</groupId>
<artifactId>in-http-bc</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.test3</groupId>
<artifactId>camel-su</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Be careful, in the camel se doesn't need to have your http SU in
dependency. The routing between the Camel SE and the HTTP BC will be
made by the container (SMX) using JBI routing.
------------------------------------------------------------
I run mvn install and I try to deploy the application
I had the following error at deployment:
org.apache.camel.NoSuchEndpointException: No endpoint could be found for:
ex:httphandler
So I tryed to add
xmlns:ex="http://www.servicemix.org/example"
in the camel-context (2b) either in the bean and the camelContext elements
but it didn't work.
Then, reading some topics, I tried to add the HTTP dependency into the camel
pom.xml (2a). didn't work neither.
I saw that you were talking about classpath definition but I just can't
figure out:
How (meaning when) can I indicate the "ex:httphandler" import for camel SU?
I hope I was clear... Thank you for you help
In your case, you have defined a http endpoint (consumer)
myService:my-service-http-endpoint.
This endpoint is deployed into SMX as a JBI endpoint.
Your Camel route should wait for message coming from this endpoint. So
it should look like:
from("jbi:myService/my-service-http-endpoint").to("log:in_message");
This route listens message coming from your HTTP endpoint (deployed into
SMX as a JBI endpoint) and put this message into the in_message log.
I hope it's clear :)
Regards
JB
the complete stackTrace is :
<loc-message>Could not deploy xbean service unit</loc-message>
</msg-loc-info>
</task-status-msg>
<exception-info>
<nesting-level>1</nesting-level>
<msg-loc-info>
<loc-token/>
<loc-message>No endpoint could be
found for: ex:httphandler</loc-message>
<stack-trace><![CDATA[org.apache.camel.NoSuchEndpointException: No endpoint
could be found for: ex:httphandler
at
org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:54)
at
org.apache.camel.model.RouteType.resolveEndpoint(RouteType.java:100)
at
org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:102)
at
org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:108)
at org.apache.camel.model.FromType.resolveEndpoint(FromType.java:73)
at
org.apache.camel.impl.DefaultRouteContext.getEndpoint(DefaultRouteContext.java:77)
at org.apache.camel.model.RouteType.addRoutes(RouteType.java:214)
at org.apache.camel.model.RouteType.addRoutes(RouteType.java:90)
at
org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:537)
at
org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:529)
at
org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:149)
at
org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:47)
at
org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:103)
at
org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78)
at
org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
at
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76)
at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:275)
at
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:737)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:384)
at
org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy(AbstractXBeanDeployer.java:86)
at
org.apache.servicemix.camel.CamelSpringDeployer.deploy(CamelSpringDeployer.java:71)
at
org.apache.servicemix.common.BaseServiceUnitManager.doDeploy(BaseServiceUnitManager.java:88)
at
org.apache.servicemix.common.BaseServiceUnitManager.deploy(BaseServiceUnitManager.java:69)
at
org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly(DeploymentService.java:508)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly(AutoDeploymentService.java:353)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive(AutoDeploymentService.java:256)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory(AutoDeploymentService.java:667)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800(AutoDeploymentService.java:62)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run(AutoDeploymentService.java:631)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
]]></stack-trace>
</msg-loc-info>
</exception-info>
</task-result-details>
</component-task-result-details>
</component-task-result>
</jbi-task-result>
</jbi-task>
at
org.apache.servicemix.jbi.framework.ManagementSupport.failure(ManagementSupport.java:125)
at
org.apache.servicemix.jbi.framework.ManagementSupport.failure(ManagementSupport.java:111)
at
org.apache.servicemix.jbi.framework.DeploymentService.deployServiceAssembly(DeploymentService.java:543)
at
org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly(AutoDeploymentService.java:353)
... 6 more
Fly13DW wrote:
Thank you for your answer.
I create the project as said in the tutorial:
mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-project-root
-DgroupId=org.apache.servicemix.test3 -DartifactId=TestWsdlDistant3
------------------------------------------------------------
Then I create a HTTP SU consumer into the new created folder:
TestWsdlDistant3> mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-http-consumer-service-unit
-DgroupId=org.apache.servicemix.test3 -DartifactId=in-http-bc
the Camel SU (the SE, I think?):
TestWsdlDistant3> mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-camel-service-unit
-DgroupId=org.apache.servicemix.test3 -DartifactId=camel-su
and finally the CXF SU provider:
TestWsdlDistant3> mvn archetype:create
-DarchetypeGroupId=org.apache.servicemix.tooling
-DarchetypeArtifactId=servicemix-cxf-bc-service-unit
-DgroupId=org.apache.servicemix.test3 -DartifactId=out-cxf-bc
------------------------------------------------------------
I try mvn install (just to see if everything is ok)
I have a Build failed and these error messages :
error: error reading
D:\Users\itmaster\.m2\repository\org\springframework\spring-support\2.0.6\spring-support-2.0.6.jar;
error in opening zip file
error: error reading
D:\Users\itmaster\.m2\repository\xerces\xerces\2.0.2\xerces-2.0.2.jar;
error in opening zip file
so I just try to delete these files and build again and I have the same
error with another one:
[INFO] Unable to find resource 'xerces:xerces:jar:2.0.2' in repository
apache (http://people.apache.org/repo/m2-ibiblio-rsync-repository)
Downloading:
http://servicemix.org/m2-repo/xerces/xerces/2.0.2/xerces-2.0.2.jar
1K downloaded (spring-support-2.0.6.jar)
1K downloaded (xerces-2.0.2.jar)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local =
'000fe85014f41d2570499c0f861c6e98665499ec'; remote = '<!--
top.location="http://servicemix.org/?fp=kXHnDH0xDZIfzlzX%2BEMg2aI8qPN9TqlzHEvrAIivMgIVV8vmkUBX4h5fLLjpt9HdKiETENFLeq7LkY2rrQCF2FHRwxbQ0JOI5XstHCqgtkjkneSsbkG9g5TREzkc6g28z%2B3I&cifr=1";
/*
-->
<script' - RETRYING
Downloading:
http://servicemix.org/m2-repo/org/springframework/spring-support/2.0.6/spring-support-2.0.6.jar
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local =
'd8139c47cb24b298407e36191473fa0a5ab8bbdd'; remote = '<!--
top.location="http://servicemix.org/?fp=kXHnDH0xDZIfzlzX%2BEMg2aI8qPN9TqlzHEvrAIivMgG0LVtTK53YbqdD8EHCEuJyd%2BkjnjI2WBtsvlBX76VzTsAnUF%2FzL%2BaLUNTBFrTXZaMDt3sXM13kSMp4Y56EJ3DCJUDA&cifr=1";
/*
-->
<script' - RETRYING
Downloading:
http://servicemix.org/m2-repo/xerces/xerces/2.0.2/xerces-2.0.2.jar
1K downloaded (spring-support-2.0.6.jar)
1K downloaded (xerces-2.0.2.jar)
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local =
'f080208aea8ead70f558a477b75823eb2edf0528'; remote = '<!--
top.location="http://servicemix.org/?fp=kXHnDH0xDZIfzlzX%2BEMg2aI8qPN9TqlzHEvrAIivMgV6gYeVlYjq3NS%2BzAEK8w9wFtV%2FHPf%2BrPQZdHtrGqJHtifNu99Ejea0M8k2UkVu6zZn%2FCpaMZLYESTRe7Gfw%2FqxB90c&cifr=1";
/*
-->
<script' - IGNORING
[WARNING] *** CHECKSUM FAILED - Checksum failed on download: local =
'6bdc54056ba8980e25701c351629116897ace8ee'; remote = '<!--
top.location="http://servicemix.org/?fp=kXHnDH0xDZIfzlzX%2BEMg2aI8qPN9TqlzHEvrAIivMgRsfuksEv7MO3Rr1LS8rmxCcpQDTTFBgZnvXuESeWVrUW%2BLbGYnJsDy3WYHVnKIan6zcl7W08M%2Bmm6a3rJd0s20huUO&cifr=1";
/*
-->
<script' - IGNORING
(and the same for spring-support).
I think this means that the source is not available.
Do I have to modify some configuration (resource server)?
Does someone have a hint?
Regards,
Cedric
Gert Vanthienen wrote:
L.S.,
First of all, welcome to ServiceMix! ;)
If you want to receive the non-soap XML message using a HTTP POST, an
HTTP consumer endpoint would be the ideal solution there. For
invoking the external endpoint, you could use an HTTP provider
endpoint but we would generally recommend using the servicemix-cxfbc,
because it is specifically geared towards dealing with web services.
Once you have these two set up, you could actually choose any
component that best suits your needs : servicemix-bean if you want to
use a POJO, servicemix-saxon if you are going for XSL, ... My
personal favorite/recommendation would be to use Camel inbetween the
two endpoints: it has excellent EIP and POJO support and there are
components available for XSL, EL, ... to help you build the
transformations.
So in a nutshell, I think the best solution for you would be:
HTTP consumer -> Camel route -> CXF provider
Regards,
Gert Vanthienen
------------------------
Open Source SOA: http://fusesource.com
Blog: http://gertvanthienen.blogspot.com/
2009/5/27 Fly13DW <[email protected]>:
Hello,
I'm new with Apache ServiceMix, and I'm asking questions concerning the>
architecture I should use.
1) I have a XML message as entry (no-SOAP)
<message>msg</message>
2) This message has to be converted to be passed to an external Web
Service,
using SOAP.
3) The Web Service returns a SOAP message that has to be converted back
to
XML
I thought I use the servicemix-http for the Binding Component (1), and
maybe
the servicemix-jsr181 (2).
My questions are :
- do you think there is a better Binding Component (1) to do this job?
- my servicemix-jsr181 will use a java pojo. Do I have to do a call to
the
Web Service in this implemented class, or should I use another
architecture?
thank you for your answers
--
View this message in context:
http://www.nabble.com/components-to-use-for-an-XML-to-SOAP-request-tp23745527p23745527.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.
-----
---
Gert Vanthienen
http://gertvanthienen.blogspot.com