1. 程式人生 > >webService 從入門到精通,一起打包了

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>

下面按照上面的方法生成客戶端,測試就可以了。兩種版本不一樣,不能互相訪問,可能生成策略不一樣。所以需要注意!