webService 從入門到精通,一起打包了
一、介面的初級寫法
可以直接用Eclipse建立一個專案。Flie--->New--->Other---->Dynamic Web Project(java普通專案也可以,我個人喜歡用web專案)
---->輸入Project name 其他預設,點下一步就可以了----->在Default output folder輸入WebContent\WEB-INF\classes--->專案建立結束。
2、開始編寫介面方法(包和類檔案建立完畢的情況下)
在編寫的類的上方需要新增"@WebService"
然後是方法編寫的部分:
注意:::這裡的方法是提供給人呼叫的介面,必須要是public修飾。
最後是介面的釋出:
執行結果:
注意這裡圖片中的右上方的小框不能點掉了,不然接下來的測試是看不到結果的!!!!
2、用這裡檢視wsdl檔案的地址自動生成客戶端
首先依照上面的說的步驟新建另一個專案
滑鼠點中這個新的專案,然後在專案上點選右鍵 New-->Other-->選擇Web Service Client
生成的客戶端程式碼:
這裡將生成的test包刪掉這裡用不到
測試程式碼的編寫
點選執行就可以等待結果了。(這裡等待結果一般時間都會很長)
這就是初級的介面
二、利用Axis框架進行應用型介面的開發
Axis框架現在用的比較多的版本是Axis1.4 和 Axis2.0 版本的。首先我先聊聊2.0版本的,因為2.0版本簡單,而且2.0版本的環境也使用與1.4版本。
1、下載Axis2
在本文使用了目前Axis2的最新版本1.6.4。讀者可以下載如下兩個zip包:
axis2-1..6.4-bin.zip
axis2-1.6.4-war.zip
環境配置(前提Tomcat已經配置好了)解壓axis2-1.6.4-war.zip 將目錄中的axis2.war檔案放到Tomcat伺服器的webapps目錄中(本文使用 的Tomcat的版本是7.x),並啟動Tomcat。(不要偷懶用eclipse啟動,因為我不但想過還幹過。)
Tomcat啟動需要用cmd命令啟動
啟動成功
在瀏覽器位址列中輸入如下的URL: http://localhost:8080/axis2/
好了!環境配置好了。接下來需要建立一個java專案(本人建立的是JavaWeb專案),將下載的axis2-1..6.4-bin.zip 解壓,將相應的jar包放到我們專案的WEB-INF/lib資料夾下
lib資料夾下
接下來在我們建立的web專案中需要做把配置專案檔案建一下:
看圖建檔案“/WebContent/WEB-INF/services/conf/META-INF/services.xml”
(--在WEB-INF下建立services資料夾然後建立------conf----META-INF----services.xml--)
當然web.xml檔案是不可少的。
這是services.xml中的內容
<?xml version="1.0" encoding="UTF-8"?>
<service name="ThreeWS"> <!-- 指定服務名,隨便定義 -->
<description>測試axis2webservices</description><!-- 服務的作用說明,可寫可不寫 -->
<!-- 指定要釋出的類路徑 -->
<parameter name="ServiceClass"> <!-- 自定義 name-->
com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces.test <!-- 寫的類路徑 -->
</parameter>
<!-- 類裡面的方法,有其他方法就在寫個operation標籤 -->
<operation name="transWords"> <!-- 類裡面的方法名 -->
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
<!-- http://localhost:8080/testaxis2webservice/services/Testservice?wsdl -->
http://localhost:8080/testaxis2webservice/services/Testservice?wsdl
註釋:上面的路徑是搭建好web專案後要執行的wsdl路徑
1: 指定服務名 =====就是要執行的wsdl路徑的?和/之間的那一部分===可以說指定的服務名是wsdl路徑的一部分
2:服務的作用說明====這個不用管===就相當於一個註釋,說說你要釋出的webservice是幹啥的
3:指定要釋出的類路徑======就是你要把那個類做成webservice
4:類裡面的方法,有其他方法就在寫個operation標籤=======配置你寫的類裡面的方法
這是web.xml中的內容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>webservices</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
現在在我們的專案中編寫介面方法
編寫完成啟動專案:
路徑的組成:tomcate裡配置的ip和埠號 + 專案名 + web.xml裡配置的<url-pattern> + service.xml裡面指定的服務名
接下來生成客戶端:可以按照初級教程的方法生成客戶端
編寫測試類:
package com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces;
import java.rmi.RemoteException;
public class test {
public static void main(String[] args) {
ThreeWSPortTypeProxy proxy = new ThreeWSPortTypeProxy();
String transWords="";
try {
transWords = proxy.transWords("work hard !!!!");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(transWords);
}
}
編寫好測試類,然後直接測試就可以了
這個是Axis2的教程。
我在實際的開發過程中發現Axis2的環境可以在Axis1.4 中使用。
先看我的開發中Axis專案的檔案結構(在進行開發的時候需要將axis-bin-1_4.zip中的jar引入到專案中)
這裡的只有兩個核心類只有ThreeWS和ThreeImpl檔案
程式碼
/*
* @(#) Three.java 2016年12月27日
*
* Copyright (c) 2016, SIMPO Technology. All Rights Reserved. SIMPO Technology. CONFIDENTIAL
*/
package com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.parsers.ParserConfigurationException;
/**
* @author SandRomance
* @version 1.0
* @since 2016年12月27日
*/
@WebService(name ="ThreeWS")
public interface ThreeWS {
//獲取調解員資訊
@WebMethod
public String getMediators(String arg1,String arg2) throws ParserConfigurationException;
//儲存案件資訊
@WebMethod
public String saveMediation(String arg1,String arg2) throws ParserConfigurationException;
}
ThreeImpl的ThreeWS介面實現程式碼:
/*
* @(#) ThreeImpl.java 2018年7月17日
*
* Copyright (c) 2018, SIMPO Technology. All Rights Reserved. SIMPO Technology. CONFIDENTIAL
*/
package com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces;
import org.apache.commons.codec.binary.Base64;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.parsers.ParserConfigurationException;
import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Date;
/**
* @ClassName: ThreeImpl
* @Description: 力宇介面
* @author SandRomance
* @date 2018年7月18日 上午10:05:31
*/
@WebService(endpointInterface = "com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces.ThreeWS")
public class ThreeImpl implements ThreeWS {
@Override
public String getMediators(String arg1, String arg2) throws ParserConfigurationException {
// TODO Auto-generated method stub
return null;
}
@Override
public String saveMediation(String arg1, String arg2) throws ParserConfigurationException {
// TODO Auto-generated method stub
return null;
}}
下面編寫配置檔案
先看一下檔案結構
在WEB-INF下建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="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="adminPassword" value="admin"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
<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>-->
<!-- <service name="HelloWorld" provider="java:RPC" style="document" use="literal">
<parameter name="className" value="example.HelloWorld"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="Application"/>
<namespace>http://example</namespace>
</service>-->
<!--介面的名字 -->
<service name="ThreeWS" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<!--提供外接呼叫的類-->
<parameter name="className" value="com.thinkgem.jeesite.modules.caseinfo.TheThreeInterfaces.ThreeImpl" />
<parameter name="scope" value="Application"/>
</service>
<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler">
<parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/>
<parameter name="serviceName" value="ThreeWS"/>
<parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
<parameter name="portName" value="Demo"/>
</handler>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
<!--comment following line for REMOVING wsdl spying via SOAPMonitor-->
<handler type="soapmonitor"/>
</requestFlow>
<responseFlow>
<!--comment following line for REMOVING wsdl spying via SOAPMonitor-->
<handler type="soapmonitor"/>
</responseFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<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"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
web.xml的內容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>my</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<display-name>SOAPMonitorService</display-name>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5101</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
</web-app>
下面按照上面的方法生成客戶端,測試就可以了。兩種版本不一樣,不能互相訪問,可能生成策略不一樣。所以需要注意!