Thursday, December 19, 2013

Create webservice proxy dengan wsimport

Berikut ini adalah contoh membuat webservice proxy dengan perintah wsimport tanpa mengunakan IDE apapun.

wsimport adalah tool bawaan dari java untuk import webservice ke dalam bentuk class java.
wsimport otomatis tersedia jika kita sudah menginstall java jdk.

misal kita akan mengimport webservice : http://192.168.56.101:8888/reports/rwwebservice?wsdl

kita buat dulu direktori tempat kita mengimport webservice nya.

kemudian jalankan perintah wsimport dari command line :

$ wsimport -keep http://192.168.56.101:8888/reports/rwwebservice?wsdl



parameter -keep ini bersifat optional, untuk generate file *.java dan *.class juga.
jika kita tidak mencantumkan parameter ini maka yang digenerate hanya *.class saja.

Selanjutnya kita akan mempackage file-file hasil hasil import tadi menjadi sebuah library jar.
sehingga jar ini bisa kita reusable atau kita dapat gunakan dimanapun.

dengan perintah :

$ jar cfv nama_jar.jar -C directory_generated_wsdl/ .


selamat mencoba. :)

Invoke SOAP Webservice dari java class

Berikut ini adalah contoh memanggil SOAP webservice dari sebuah class java tanpa menggunakan webservice proxy.

kita akan menggunakan wsdl : http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl sebagai contohnya.

kita akan memanggil method operation "LatLonListZipCode"

kemudian kita definisikan dulu SOAP message nya.

 <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ndf="http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl">  
   <soapenv:Header/>  
   <soapenv:Body>  
    <ndf:LatLonListZipCode soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
      <zipCodeList xsi:type="xsd:string">19110</zipCodeList>  
    </ndf:LatLonListZipCode>  
   </soapenv:Body>  
 </soapenv:Envelope>  

Selanjutnya kita buat sample java class sebagai client nya.

 import java.io.ByteArrayInputStream;  
 import java.io.ByteArrayOutputStream;  
 import javax.xml.namespace.QName;  
 import javax.xml.transform.Source;  
 import javax.xml.transform.Transformer;  
 import javax.xml.transform.TransformerConfigurationException;  
 import javax.xml.transform.TransformerException;  
 import javax.xml.transform.TransformerFactory;  
 import javax.xml.transform.TransformerFactoryConfigurationError;  
 import javax.xml.transform.stream.StreamResult;  
 import javax.xml.transform.stream.StreamSource;  
 import javax.xml.ws.Dispatch;  
 import javax.xml.ws.Service;  
 import javax.xml.ws.soap.SOAPBinding;  
 import javax.xml.ws.soap.SOAPFaultException;  
 public class JAXWSClient {  
   final String WSDL_ENDPOINT_URL = "http://graphical.weather.gov/xml/SOAP_server/ndfdXMLserver.php?wsdl";  
   String targetNS = "http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl";  
   QName operationName = new QName(targetNS, "ndfdXML");  
   QName portQName = new QName(targetNS, "ndfdXMLPort");  
   public String invokeWebService(String inputMsg){  
     String responseStr=null;  
     try {  
       /**  
        * Define the service.  
        */  
       Service svc = Service.create(operationName);  
       svc.addPort(portQName,SOAPBinding.SOAP11HTTP_BINDING,WSDL_ENDPOINT_URL);  
       /**  
        * Create the dynamic invocation object from this service.  
        */  
       Dispatch<Source> dispatch = svc.createDispatch(portQName,Source.class,Service.Mode.MESSAGE);  
       ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(inputMsg.getBytes());  
       Source input = new StreamSource(byteArrayInputStream);  
       /**  
        * call WebService  
        */  
       Source response = dispatch.invoke(input);  
       /**  
       * get the  webservice response.  
       */  
       StreamResult result = new StreamResult(new ByteArrayOutputStream());  
       Transformer trans = TransformerFactory.newInstance().newTransformer();  
       trans.transform(response, result);  
       ByteArrayOutputStream baos = (ByteArrayOutputStream) result.getOutputStream();  
       /**  
       * Write out the response content to string.  
       */  
       responseStr = new String(baos.toByteArray());  
       System.out.println("XML Response : "+responseStr);   
     }catch (SOAPFaultException e) {  
       System.out.println("SOAPFaultException: " + e.getFault().getFaultString());  
     } catch (TransformerConfigurationException e) {  
       e.printStackTrace();  
     } catch (TransformerFactoryConfigurationError e) {  
       e.printStackTrace();  
     } catch (TransformerException e) {  
       e.printStackTrace();  
     }   
     return responseStr;  
   }  
   public static void main(String[] args) {  
     try {     
       String xmlRequest = " <soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ndf=\"http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl\"> " +   
       "  <soapenv:Header/> " +   
       "  <soapenv:Body> " +   
       "   <ndf:LatLonListZipCode soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"> " +   
       "     <zipCodeList xsi:type=\"xsd:string\">19110</zipCodeList> " +   
       "   </ndf:LatLonListZipCode> " +   
       "  </soapenv:Body> " +   
       "</soapenv:Envelope> ";  
      JAXWSClient jax_ws_client=new JAXWSClient();  
      String response=jax_ws_client.invokeWebService(xmlRequest);  
      //System.out.println("----- Response ----->:"+response);  
     }  
     catch (Exception t) {  
       t.printStackTrace();  
     }  
   }  
 }  

Outputnya menjadi :

 XML Response :   
 <?xml version = '1.0' encoding = 'UTF-8'?>  
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">  
 <SOAP-ENV:Header/>  
 <SOAP-ENV:Body>  
 <ns1:LatLonListZipCodeResponse xmlns:ns1="http://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl">  
 <listLatLonOut xsi:type="xsd:string">&lt;?xml version='1.0'?>&lt;dwml version='1.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd'>&lt;latLonList>39.9525,-75.1657&lt;/latLonList>&lt;/dwml></listLatLonOut>  
 </ns1:LatLonListZipCodeResponse>  
 </SOAP-ENV:Body>  
 </SOAP-ENV:Envelope>  

Sekarang kita coba dari SOAP-UI



Hasilnya sama kan.

setelah kita dapatkan XML response nya, kita tinggal mengolah atau memparsing sesuai dengan kebutuhan.

selamat mencoba. :)




Sunday, December 1, 2013

Deploy otomatis aplikasi maven ke Tomcat7

Untuk melakukan deployment otomatis aplikasi ke server tomcat. Ada beberapa hal yg harus dilakukan.
Aplikasi kita harus menggunakan struktur maven.
Tomcat yg digunakan disini adalah Tomcat7.

1.       1.  Tambahkan nama server di file setting.xml di MAVEN_HOME
  <servers>  
  <server>  
         <id>TomcatServer</id>  
         <username>admin</username>  
         <password>admin</password>  
 </server>  
 </servers>  

Username dan password harus sama dengan user di tomcat target

2.      2.  Tambahkan user di tomcat  configurasi user (tomcat-users.xml) -> di TOMCAT_HOME/conf/tomcat-users.xml
 <tomcat-users>  
 <user name="admin" password="admin" roles="admin-gui,manager-gui,manager-script,manager-jmx" />  
 </tomcat-users>  

3.      3.  Tambahkan tomcat7-maven-plugin di pom.xml aplikasi kita

 <plugin>  
        <groupId>org.apache.tomcat.maven</groupId>  
        <artifactId>tomcat7-maven-plugin</artifactId>  
        <version>2.1</version>  
        <configuration>  
             <url>http://localhost:8083/manager/text</url>  
             <server>TomcatServer</server>  
             <path>/context</path>  
             </configuration>  
 </plugin>  


Nama server  ‘TomcatServer’ harus sama dengan server yg didefiniskan di setting.xml maven

4.      4.  Compile aplikasi kita lewat mvn console :
 $ mvn clean install  

5.       5.  Deploy aplikasi ke tomcat

 $ mvn tomcat:deploy  

      atau

 $ mvn tomcat:redeploy  

Untuk redeploy aplikasi

Otomatis aplikasi maven kita akan terdeploy otomatis di server Tomcat


Selamat mencoba. J