Playing around with SwitchYard on OpenShift Express
Prerequisite
- Fedora16 environment http://fedoraproject.org/en/get-fedora
- SwitchYard http://www.jboss.org/switchyard/downloads
- OpenShift account https://openshift.redhat.com/
Install OpenShift Express Client Tools
yum install rubygem-rhc
Create an application with jbossas-7 cartridge
Used HelloSwitchYard as the application name.
rhc app create -l <openshift-account> -a HelloSwitchYard -t jbossas-7
Add SwitchYard Subsystem to the JBoss AS7
switchyard-openshift repository provides a way of that. Let's swipe it :)
cd HelloSwitchYard git remote add switchyard-template git://github.com/jboss-switchyard/switchyard-openshift.git git fetch switchyard-template git checkout switchyard-template/master -- pom.xml git checkout switchyard-template/master -- standalone.diff git apply standalone.diff git rm -f standalone.diff
Edit pom.xml
Fix the artifact name as you like and profile id in the OpenShift manner
diff --git a/pom.xml b/pom.xml index 845c81c..44e8b12 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> - <groupId>org.switchyard.sample</groupId> - <artifactId>swydapp</artifactId> + <groupId>mynamespace.helloswitchyard</groupId> + <artifactId>HelloSwitchYard</artifactId> <version>1.0</version> - <name>swydapp</name> + <name>HelloSwitchYard</name> <properties> <switchyard.version>0.4.0.OS1</switchyard.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> @@ -43,9 +43,9 @@ <build /> <profiles> <profile> - <id>switchyard</id> + <id>openshift</id> <build> - <finalName>swydapp</finalName> + <finalName>HelloSwitchYard</finalName> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId>
Commit those changes
git add . git commit -m "Added SwitchYard Subsystem"
Import the bean-service quickstart
Import the bean-service quickstart from SwitchYard distribution. bean-service is simple enough to use as template application
cp -r ${quickstarts}/bean-service/src/main/java/org src/main/java cp -r ${quickstarts}/bean-service/src/main/resources/wsdl src/main/resources/ cp -r ${quickstarts}/bean-service/src/main/resources/META-INF src/main/resources/ cp -r ${quickstarts}/bean-service/src/test src/
Edit pom.xml
Edit pom.xml to add dependency on switchyard-component-bean, switchyard-component-soap, switchyard-test
diff --git a/pom.xml b/pom.xml index 44e8b12..210a101 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,18 @@ <artifactId>switchyard-plugin</artifactId> <version>${switchyard.version}</version> </dependency> + <dependency> + <groupId>org.switchyard.components</groupId> + <artifactId>switchyard-component-bean</artifactId> + <version>${switchyard.version}</version> + </dependency> + <dependency> + <groupId>org.switchyard.components</groupId> + <artifactId>switchyard-component-soap</artifactId> + <version>${switchyard.version}</version> + </dependency> + <dependency> + <groupId>org.switchyard</groupId> + <artifactId>switchyard-test</artifactId> + <version>${switchyard.version}</version> + </dependency> </dependencies> <repositories> <repository>
Edit src/main/resources/META-INF/switchyard.xml
comment out the socketAddr & contextPath elements in the binding.soap element
diff --git a/src/main/resources/META-INF/switchyard.xml b/src/main/resources/META-INF/switchyard.xml index 3d24bed..cb193bc 100644 --- a/src/main/resources/META-INF/switchyard.xml +++ b/src/main/resources/META-INF/switchyard.xml @@ -5,8 +5,8 @@ <interface.wsdl interface="wsdl/OrderService.wsdl#wsdl.porttype(OrderService)"/> <binding.soap xmlns="urn:switchyard-component-soap:config:1.0"> <wsdl>wsdl/OrderService.wsdl</wsdl> - <socketAddr>:18001</socketAddr> - <contextPath>quickstart-bean</contextPath> + <!-- <socketAddr>:18001</socketAddr> --> + <!-- <contextPath>quickstart-bean</contextPath> --> </binding.soap> </service> </composite>
Edit src/test/java/org/switchyard/quickstarts/bean/service/WebServiceTest.java
Change the web service address in the testcase
diff --git a/src/test/java/org/switchyard/quickstarts/bean/service/WebServiceTest.java b/src/test/java/org/switchyard/quickstarts/bean/service/WebServiceTest.ja index 4c6ac9e..ccdc7d0 100644 --- a/src/test/java/org/switchyard/quickstarts/bean/service/WebServiceTest.java +++ b/src/test/java/org/switchyard/quickstarts/bean/service/WebServiceTest.java @@ -41,7 +41,7 @@ public class WebServiceTest { public void invokeOrderWebService() throws Exception { // Use the HttpMixIn to invoke the SOAP binding endpoint with a SOAP input (from the test classpath) // and compare the SOAP response to a SOAP response resource (from the test classpath)... - httpMixIn.postResourceAndTestXML("http://localhost:18001/quickstart-bean/OrderService", "/xml/soap-request.xml", "/xml/soap-response.xml"); + httpMixIn.postResourceAndTestXML("http://localhost:8080/OrderService", "/xml/soap-request.xml", "/xml/soap-response.xml"); } }
Build and deploy
mvn -Popenshift clean package git add . git commit -m "Added bean-service" git push
Check the status of application
rhc app status -l <openshift-account> -a HelloSwitchYard
Logs looks like this. Don't mind about some Japanese characters in my log, and an error as well. The important thing here is that HelloSwitchYard.jar has been Deployed successfully.
2012/03/14 14:55:38,258 INFO [org.jboss.weld.deployer] (MSC service thread 1-2) JBAS016008: Starting weld service for deployment HelloSwitchYard.jar 2012/03/14 14:55:38,993 INFO [org.switchyard] (MSC service thread 1-3) Starting SwitchYard service 2012/03/14 14:55:39,099 INFO [org.apache.camel.impl.converter.AnnotationTypeConverterLoader] (MSC service thread 1-3) Found 3 packages with 14 @Converter classes to load 2012/03/14 14:55:39,109 INFO [org.apache.camel.impl.converter.DefaultTypeConverter] (MSC service thread 1-3) Loaded 153 core type converters (total 153 type converters) 2012/03/14 14:55:39,111 INFO [org.apache.camel.impl.converter.DefaultTypeConverter] (MSC service thread 1-3) Loaded additional 0 type converters (total 153 type converters) in 0.001 seconds 2012/03/14 14:55:40,197 INFO [org.switchyard.component.soap.InboundHandler] (MSC service thread 1-3) Publishing WebService at http://127.13.2.129:18001/swydws/OrderService 2012/03/14 14:55:40,630 情報 [org.apache.cxf.service.factory.ReflectionServiceFactoryBean] (MSC service thread 1-3) Creating Service {urn:switchyard-quickstart:bean-service:1.0}OrderService from WSDL: vfs:/content/HelloSwitchYard.jar/wsdl/OrderService.wsdl 2012/03/14 14:55:41,376 情報 [org.apache.cxf.endpoint.ServerImpl] (MSC service thread 1-3) Setting the server's publish address to be http://127.13.2.129:18001/swydws/OrderService 2012/03/14 14:55:41,504 ERROR [org.jboss.as] (MSC service thread 1-3) JBAS015875: JBoss AS 7.1.0.Final "Thunder" started (with errors) in 7971ms - Started 143 of 178 services (1 services failed or missing dependencies, 31 services are passive or on-demand) 2012/03/14 14:55:41,549 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed "HelloSwitchYard.jar"
Submit a WebService request using SoapUI
Assuming the namespace is "namespace", Import WSDL from http://helloswitchyard-namespace.rhcloud.com/swydws/OrderService?wsdl into SoapUI and invoke.
Request
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:switchyard-quickstart:bean-service:1.0"> <soapenv:Header/> <soapenv:Body> <urn:submitOrder> <order> <orderId>XYZ</orderId> <itemId>BUTTER</itemId> <quantity>200</quantity> </order> </urn:submitOrder> </soapenv:Body> </soapenv:Envelope>
Response
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <SOAP-ENV:Body> <orders:submitOrderResponse xmlns:orders="urn:switchyard-quickstart:bean-service:1.0"> <orderAck> <orderId>XYZ</orderId> <accepted>true</accepted> <status>Order Accepted</status> </orderAck> </orders:submitOrderResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Then you are all set to develop the SwitchYard application on OpenShift Express!
You may want to use the forge tool instead of editing switchyard.xml by hand. Let's see this:
Enjoy!