根據已有的WSDL文件進行WebService服務開發和部署

如何根據WSDL文檔開發部署Web Service服務?

WSDL文檔是描述Web Service接口該如何開發和部署的具體描述文檔,十分重要。一個接口的WSDL文檔裏會包含接口部署時的服務名(service name),接口的綁定信息,綁定端口信息和接口方法中的參數信息等。根據這些信息,我們可以通過WSDL文檔反向自動建立接口的java代碼結構,提高開發工作效率。

下面介紹一下使用WSDL文檔反向自動建立接口的java代碼結構的步驟。

一、新建Dynamic Web Project 項目。

二、在項目中添加已有的WSDL文檔。

WSDL文檔直接放在項目根目錄下。

wKiom1XRa7KBBuDbAAB5ahXfjMU489.jpg

WSDL文檔內容說明:

wKioL1XRbeWStLlEAAewdwfKk7Y724.jpg

三、根據該WSDL反向生成接口java代碼結構。

1、在項目上右鍵,進入新建web service配置窗口。

wKioL1XRbo3yDgGOAADUjPTHGic700.jpg

2、選擇Web ServiceNext

wKiom1XRbKeRtYnoAAFGYMas-WU160.jpg


3、配置web service

包括創建web service用哪種類型、選擇一個wsdl文檔、配置tomcatweb service運行環境以及service所在項目、webservice處於哪個進度(選develop階段)。

其中service implementations選擇我們在步驟(三.1)中導入的wsdl文件。

Web service type選項欄中有兩個可選項,分別是 Bottom up Java bean Web ServiceTop down Java bean Web Service。前者表示根據已有的JAVA文件生成WSDL文檔和web service服務,後者表示根據已有的WSDL文檔反向生成web service服務的JAVA代碼結構。

在這裏,我們選擇後者。

wKioL1XRbuegAtPyAALb8W9TsVw439.jpg

wKioL1XRbwPSeRUgAAJLCF7JB3c331.jpg

wKiom1XRbRTjmZXqAAEoSRrzWEc652.jpg

4、接下來就都是next,最後finishweb service代碼結構已經生成了。

wKiom1XRbTPRqWObAAMiGHNXSec534.jpg


接下來的工作,就是在IfAPServiceSoapBindingImpl.java文件中編寫我們的業務邏輯代碼,可以另外創建其他package包,合理安排代碼模塊。

wKioL1XRb1uCrf2tAAD6NvOiPZQ661.jpg


四、web service的業務代碼編寫完之後,開始發佈。

1、新建發佈文件server-config.wsdd

自動發佈的方法,就是在項目的WEB-INF路徑下新建一個server-config.wsdd發佈文件。這個文件的大部分內容可以來源於模板(模板內容稍後貼出),只有<service>...</service>部分填寫剛寫好的web service的發佈部署信息。這部分信息在自動生成的deploy.wsdd中已經有了,我們可以直接拿過來,複製到server-config.wsdd中。

wKioL1XRb6vxzRFXAAHjoCWuHbQ004.jpg

注:server-config.wsdd的基本內容如下:

<?xml version="1.0"encoding="UTF-8"?>

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <globalConfiguration>

       <parameter name="adminPassword" value=XXXX" />

       <parameter name="attachments.Directory" value="D:\Tomcat\temp\axis\WEB-INF\attachments"/>

       <parameter name="attachments.implementation"

           value="org.apache.axis.attachments.AttachmentsImpl"/>

       <parameter name="sendXsiTypes" value="true" />

       <parameter name="sendMultiRefs" value="true" />

       <parameter name="sendXMLDeclaration" value="true" />

       <parameter name="axis.sendMinimizedElements" value="true" />

       <requestFlow>

           <handler type="java:org.apache.axis.handlers.JWSHandler">

              <parameter name="scope" value="session"/>

           </handler>

           <handler type="java:org.apache.axis.handlers.JWSHandler">

              <parameter name="scope" value="request"/>

              <parameter name="extension" value=".jwr"/>

           </handler>

       </requestFlow>

    </globalConfiguration>

    <handler name="LocalResponder"

       type="java:org.apache.axis.transport.local.LocalResponder"/>

    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>

    <handler name="Authenticate"

       type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

    <service name="AdminService" provider="java:MSG">

       <parameter name="allowedMethods" value="AdminService" />

       <parameter name="enableRemoteAdmin" value="false" />

       <parameter name="className" value="org.apache.axis.utils.Admin"/>

       <namespace>http://xml.apache.org/axis/wsdd/</namespace>

    </service>

<!--   <service name="Version"provider="java:RPC"> -->

<!--       <parameter name="allowedMethods"value="getVersion" /> -->

<!--       <parameter name="className"value="org.apache.axis.Version" /> -->

<!--   </service> -->

    <!--myself webservice-->

 <service name="IfAPService" provider="java:RPC" style="rpc"use="encoded">

     <parameter name="wsdlTargetNamespace" value="http://eaaapi.eaa.eidc.huawei.com/"/>

     <parameter name="wsdlServiceElement" value="IfAPService"/>

     <parameter name="wsdlServicePort" value="IfAPService"/>

     <parameter name="className" value="com.huawei.eidc.eaa.eaaapi.IfAPServiceSoapBindingSkeleton"/>

     <parameter name="wsdlPortType" value="APService"/>

     <parameter name="typeMappingVersion" value="1.2"/>

     <parameter name="allowedMethods" value="*"/>

 </service>

    <transport name="http">

       <requestFlow>

           <handler type="URLMapper" />

           <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

       </requestFlow>

       <parameter name="qs:list"

           value="org.apache.axis.transport.http.QSListHandler"/>

       <parameter name="qs.list"

           value="org.apache.axis.transport.http.QSListHandler"/>

       <parameter name="qs:method"

           value="org.apache.axis.transport.http.QSMethodHandler"/>

       <parameter name="qs.method"

           value="org.apache.axis.transport.http.QSMethodHandler"/>

       <parameter name="qs:wsdl"

           value="org.apache.axis.transport.http.QSWSDLHandler"/>

       <parameter name="qs.wsdl"

           value="org.apache.axis.transport.http.QSWSDLHandler"/>

    </transport>

    <transport name="local">

       <responseFlow>

           <handler type="LocalResponder" />

       </responseFlow>

    </transport>

</deployment>

2、發佈web service

在上述步驟之後,我們可以發佈接口項目了。只需要將項目打包成war文件,並將war包放到指定的tomcatwebapps路徑下,啓動tomcat。這裏我們把打包的包名設爲webTest.war

wKioL1XRcFqRRh73AADFwtJerv4265.jpg


3、查看發佈的web service是否成功。

在瀏覽器中輸入: http://localhost:8080/webTest/services

注意不要在”services”後面加斜槓/ ’),得到下面的結果,可知web service發佈成功。

wKiom1XRbouiy7YOAADHzUR0zmM342.jpg


五、測試代碼


import java.io.IOException;
import javax.xml.namespace.QName;
import model.Utility;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.http.params.CoreConnectionPNames;

 

/**模擬ADCSI發送數據請求*/
public class ADC2SI {

private static String test_url = "http://172.0.0.1:8080/webTest/services/IfAPService";
//調用SI接口,發送post請求
public static void main(String[] args) throws HttpException, IOException{
String str = "params";
postmethod2(test_url,str);
}
public static void postmethod2(String url, String str) throws HttpException, IOException{
// 使用RPC方式調用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定調用WebServiceURL
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
// 指定要調用的sayHelloToPerson方法及WSDL文件的命名空間
QName opAddEntry = new QName("http://eaaapi.eaa.eidc.huawei.com","corpBinding");
// 指定sayHelloToPerson方法的參數值
Object[] opAddEntryArgs = new Object[] { str };
// 指定sayHelloToPerson方法返回值的數據類型的Class對象
@SuppressWarnings("
rawtypes")
Class[] classes = new Class[] { String.class };
// 調用sayHelloToPerson方法並輸出該方法的返回值
try{
System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);
System.
out.println("發送數據 SUCCESS");
}catch(Exception e){
System.
out.println("發送數據 FAILED");
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章