Hi Reena

U need to use CXF component for doing the same. Here i am following the WSDL
first approach. i.e I got the wsdl file from the service provider. The wsdl
file which I got is as follows.
*
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:tns="http://xmlns.example.com/1386864564116";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:ns0="http://inputMessage.data"; xmlns:ns1="http://outputMessage.data";
name="Untitled" targetNamespace="http://xmlns.example.com/1386864564116";>
    <wsdl:types>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns="http://outputMessage.data";
targetNamespace="http://outputMessage.data"; elementFormDefault="qualified"
attributeFormDefault="unqualified">
            <xs:element name="RES">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="RANK" type="xs:string"
minOccurs="0"/>
                        <xs:element name="MARKS" type="xs:string"
minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns="http://inputMessage.data"; targetNamespace="http://inputMessage.data";
elementFormDefault="qualified" attributeFormDefault="unqualified">
            <xs:element name="REQ">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="FIRSTNAME" type="xs:string"
minOccurs="0"/>
                        <xs:element name="LASTNAME" type="xs:string"
minOccurs="0"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </wsdl:types>
    <wsdl:service name="WebService">
        <wsdl:port name="getResultEndpoint1"
binding="tns:getResultEndpoint1Binding">
            <soap:address
location="http://REJI-PC:8181/WebService.serviceagent/getResultEndpoint1"/>
        </wsdl:port>
    </wsdl:service>
    <wsdl:portType name="getResult">
        <wsdl:operation name="getResultAndRank">
            <wsdl:input message="tns:REQ_MESSAGE"/>
            <wsdl:output message="tns:RES_MESSAGE"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="getResultEndpoint1Binding" type="tns:getResult">
        <soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="getResultAndRank">
            <soap:operation style="document"
soapAction="/WebService.serviceagent/getResultEndpoint1/getResultAndRank"/>
            <wsdl:input>
                <soap:body use="literal" parts="part1"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal" parts="part1"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:message name="REQ_MESSAGE">
        <wsdl:part name="part1" element="ns0:REQ"/>
    </wsdl:message>
    <wsdl:message name="RES_MESSAGE">
        <wsdl:part name="part1" element="ns1:RES"/>
    </wsdl:message>
</wsdl:definitions>
*



Now I will come to the camel project. I have used a plugin  to generate the
Java stubs and SEI for the web service invocation. Find a copy of my POM
file and you can figure out the plugin which is used for generating the
Stubs.

*<?xml version="1.0" encoding="UTF-8" standalone="no"?><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>

  

  <version>1.0.0-SNAPSHOT</version>
  <groupId>com.poc</groupId>
  <artifactId>bw-client</artifactId>
  <name>BWClient</name>
  <description>Creates a web service using the WSDL contract
first</description>

  <repositories>
    <repository>
      <id>fusesource</id>
      <name>FuseSource Release Repository</name>
      <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
    <repository>
        <id>fusesource.ea</id>
        <name>FuseSource Community Early Access Release Repository</name>
        <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>
    <repository>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.jboss.org/nexus/content/groups/public/</url>
      <layout>default</layout>
      <releases>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>daily</updatePolicy>
      </snapshots>
    </repository>
  </repositories>

  <pluginRepositories>
    <pluginRepository>
      <id>fusesource</id>
      <name>FuseSource Release Repository</name>
      <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </pluginRepository>
    <pluginRepository>
        <id>fusesource.ea</id>
        <name>FuseSource Community Early Access Release Repository</name>
        <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
  </pluginRepositories>


  <dependencies>

        
                <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-core</artifactId>
                        <version>2.10.0.fuse-71-047</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-cxf</artifactId>
                        <version>2.10.0.fuse-71-047</version>
                </dependency>

                <dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.16</version>
                </dependency>

                
                <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                        <version>1.6.1</version>
                </dependency>
                <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                        <version>1.6.1</version>
                </dependency>

                
                <dependency>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-rt-transports-http-jetty</artifactId>
                        <version>2.6.0.fuse-71-047</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-test-spring</artifactId>
                        <version>2.10.0.fuse-71-047</version>
                        <scope>test</scope>
                </dependency>

                <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>4.10</version>
                        <scope>test</scope>
                </dependency>


                


                <dependency>
                        <groupId>commons-lang</groupId>
                        <artifactId>commons-lang</artifactId>
                        <version>2.6</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-lang3</artifactId>
                        <version>3.1</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-mail</artifactId>
                        <version>2.10.6</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.servicemix.specs</groupId>
                        
<artifactId>org.apache.servicemix.specs.activation-api-1.1</artifactId>
                        <version>2.1.0</version>
                </dependency>

                <dependency>
                        <groupId>javax.mail</groupId>
                        <artifactId>mail</artifactId>
                        <version>1.4</version>
                </dependency>


                <dependency>
                        <groupId>org.apache.activemq</groupId>
                        <artifactId>activemq-camel</artifactId>
                        <version>5.8.0</version>
                </dependency>

                <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-mail</artifactId>
                        <version>2.10.0.fuse-71-047</version>

                </dependency>
  </dependencies>

  <build>
    <plugins>

      <plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.6.0.redhat-60024</version>
        <executions>
          <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
             
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
              <wsdlOptions>
                <wsdlOption>
                 
<wsdl>${basedir}/src/main/resources/wsdl/MyResultService.wsdl</wsdl>
                  <extraargs>
                    <extraarg>-impl</extraarg>
                  </extraargs>
                </wsdlOption>
              </wsdlOptions>
            </configuration>
            <goals>
              <goal>wsdl2java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.6</source>
          <target>1.6</target>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
      </plugin>

      
      <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-maven-plugin</artifactId>
        <version>2.10.0.redhat-60024</version>
      </plugin>
    </plugins>
  </build>

</project>
*


Once your POM file is ready, you can see that the stubs are created.
<http://camel.465427.n5.nabble.com/file/n5744794/Capture.jpg> 
U can use the generated stub to invoke the web service.

Find copy of my Camel XML Spring Config File.
*<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:camel="http://camel.apache.org/schema/spring";
        xmlns:jaxws="http://cxf.apache.org/jaxws";
xmlns:cxf="http://camel.apache.org/schema/cxf";
        xmlns:osgi="http://www.springframework.org/schema/osgi";
xmlns:soap="http://cxf.apache.org/bindings/soap";
        xmlns:http-conf="http://cxf.apache.org/transports/http/configuration";
        xmlns:http="http://cxf.apache.org/transports/http/configuration";
        xmlns:sec="http://cxf.apache.org/configuration/security";
xmlns:ctx="http://www.springframework.org/schema/context";

        xsi:schemaLocation="
       http://camel.apache.org/schema/cxf
http://camel.apache.org/schema/cxf/camel-cxf.xsd
       http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
       http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://camel.apache.org/schema/spring 
         http://camel.apache.org/schema/spring/camel-spring.xsd
         http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
         http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
       http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
         http://cxf.apache.org/configuration/security
http://cxf.apache.org/schemas/configuration/security.xsd
         http://cxf.apache.org/transports/http/configuration
http://cxf.apache.org/schemas/configuration/http-conf.xsd";>

        
        <bean id="activemq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
                <property name="brokerURL" value="tcp://localhost:61616" />
                <property name="userName" value="admin" />
                <property name="password" value="admin" />
        </bean>
        

        <camelContext xmlns="http://camel.apache.org/schema/spring";>

                
                <route>
                        
                        <from uri="activemq:queue:input" />
                        <to uri="WebServiceClient"/>
                        <to uri="activemq:queue:responseXML" />
                        
                </route>

                
        </camelContext>
        
        
        
        <jaxws:client id="sapPiProxy"
                
address="http://REJI-PC:8181/WebService.serviceagent/getResultEndpoint1";
                serviceClass="com.example.xmlns._1386864564116.GetResult"
                />
        <bean id="WebServiceClient"
class="com.mycompany.camel.cxf.contract.first.ServiceClientInvoker"
                init-method="init" destroy-method="destroy">
                <property name="myService" ref="sapPiProxy" />
        </bean>
        

</beans>
*

The web service is actually invoked inside the Java class
com.mycompany.camel.cxf.contract.first.ServiceClientInvoker Find the code
below

*package com.mycompany.camel.cxf.contract.first;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

import com.example.xmlns._1386864564116.GetResult;

import data.inputmessage.REQ;
import data.outputmessage.RES;

public class ServiceClientInvoker implements Runnable, Processor,
Serializable{

        private GetResult myService;
        
        
        
        
        public GetResult getMyService() {
                return myService;
        }

        public void setMyService(GetResult myService) {
                this.myService = myService;
        }

        @Override
        public void process(Exchange exchange) throws Exception {
                // TODO Auto-generated method stub
                REQ requestData=new REQ();
                String inputString = 
exchange.getIn().getBody(java.lang.String.class);
                String[] parts = inputString.split("-");
                String part1 = parts[0]; // 004
                String part2 = parts[1]; // 034556
                
                requestData.setFIRSTNAME(part1);
                requestData.setLASTNAME(part2);
                
                RES responseObj = myService.getResultAndRank(requestData);
                
                
                

                JAXBContext jc = JAXBContext
                                .newInstance(new Class[] { RES.class });

                Marshaller um = jc.createMarshaller();
                StringWriter sw = new StringWriter();

                um.marshal(responseObj, sw);

                InputStream is = new 
ByteArrayInputStream(sw.toString().getBytes());
                org.w3c.dom.Document xmlDocument = DocumentBuilderFactory
                                .newInstance().newDocumentBuilder().parse(is);
                
                

                DOMSource domSource = new DOMSource(xmlDocument);
               StringWriter writer1 = new StringWriter();
               StreamResult result = new StreamResult(writer1);
               TransformerFactory tf = TransformerFactory.newInstance();
               Transformer transformer = tf.newTransformer();

               transformer.transform(domSource, result);
                
                
                
                
                
                exchange.getIn().setBody(writer1.toString());
                
                
        }

        private Thread t;
        @Override
        public void run() {
                // TODO Auto-generated method stub
                
        }
        
        public void init() {
                
                t = new Thread(this, "SAPPI web service invoker thread");
                t.start();

        }

        public void destroy() {
                try {
                        t.join();
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

}


*

My overall project structure will look like as follows
<http://camel.465427.n5.nabble.com/file/n5744794/structure.jpg> 

Hope my post will be helpful. 

Cheers
Reji


 



--
View this message in context: 
http://camel.465427.n5.nabble.com/How-to-call-remote-soap-web-service-from-a-application-using-apache-camel-tp5744734p5744794.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to