欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webService 从入门到精通,一起打包了

程序员文章站 2022-04-28 14:46:51
...

一、接口的初级写法

   可以直接用Eclipse建立一个项目。Flie--->New--->Other---->Dynamic Web Project(java普通项目也可以,我个人喜欢用web项目)

---->输入Project name 其他默认,点下一步就可以了----->在Default output folder输入WebContent\WEB-INF\classes--->项目创建结束。

2、开始编写接口方法(包和类文件创建完毕的情况下)

在编写的类的上方需要添加"@WebService"

 

webService 从入门到精通,一起打包了

然后是方法编写的部分:

webService 从入门到精通,一起打包了

注意:::这里的方法是提供给人调用的接口,必须要是public修饰。

最后是接口的发布:

webService 从入门到精通,一起打包了

运行结果:

webService 从入门到精通,一起打包了

注意这里图片中的右上方的小框不能点掉了,不然接下来的测试是看不到结果的!!!!

下面是看发布的成功生成的wsdl文件 在浏览器中输入发布的地址加“?wsdl”就可以了(我的--(http://localhost:8080/service/function?wsdl)--)

webService 从入门到精通,一起打包了

2、用这里查看wsdl文件的地址自动生成客户端

首先依照上面的说的步骤新建另一个项目

webService 从入门到精通,一起打包了

鼠标点中这个新的项目,然后在项目上点击右键 New-->Other-->选择Web Service Client 

webService 从入门到精通,一起打包了

直接点击下一步在Service definition中上面提到的地址复制到这里“http://localhost:8080/service/function?wsdl”直接点击Finish

webService 从入门到精通,一起打包了

生成的客户端代码:

webService 从入门到精通,一起打包了

这里将生成的test包删掉这里用不到

webService 从入门到精通,一起打包了

测试代码的编写

webService 从入门到精通,一起打包了

点击运行就可以等待结果了。(这里等待结果一般时间都会很长)

webService 从入门到精通,一起打包了

这就是初级的接口

 

二、利用Axis框架进行应用型接口的开发

Axis框架现在用的比较多的版本是Axis1.4   和     Axis2.0   版本的。首先我先聊聊2.0版本的,因为2.0版本简单,而且2.0版本的环境也使用与1.4版本。

1、下载Axis2

Axis下载地址:  http://ws.apache.org/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命令启动

webService 从入门到精通,一起打包了

启动成功

webService 从入门到精通,一起打包了

在浏览器地址栏中输入如下的URL:     http://localhost:8080/axis2/ 

webService 从入门到精通,一起打包了

好了!环境配置好了。接下来需要创建一个java项目(本人创建的是JavaWeb项目),将下载的axis2-1..6.4-bin.zip  解压,将相应的jar包放到我们项目的WEB-INF/lib文件夹下

webService 从入门到精通,一起打包了

lib文件夹下

webService 从入门到精通,一起打包了

接下来在我们创建的web项目中需要做把配置项目文件建一下:

看图建文件“/WebContent/WEB-INF/services/conf/META-INF/services.xml”

(--在WEB-INF下创建services文件夹然后创建------conf----META-INF----services.xml--)

webService 从入门到精通,一起打包了

当然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>

现在在我们的项目中编写接口方法

webService 从入门到精通,一起打包了

编写完成启动项目:

webService 从入门到精通,一起打包了

路径的组成:tomcate里配置的ip和端口号 + 项目名 + web.xml里配置的<url-pattern> + service.xml里面指定的服务名

我的项目地址:http://localhost:8080/webservices/services/ThreeWS?wsdl

webService 从入门到精通,一起打包了

接下来生成客户端:可以按照初级教程的方法生成客户端

webService 从入门到精通,一起打包了

编写测试类:

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);
	}

}

编写好测试类,然后直接测试就可以了

webService 从入门到精通,一起打包了

这个是Axis2的教程。

我在实际的开发过程中发现Axis2的环境可以在Axis1.4 中使用。

先看我的开发中Axis项目的文件结构(在进行开发的时候需要将axis-bin-1_4.zip中的jar引入到项目中)

webService 从入门到精通,一起打包了

这里的只有两个核心类只有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;
	}}

 下面编写配置文件

先看一下文件结构

webService 从入门到精通,一起打包了

在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>

用tomcat运行项目 并访问wsdl文件(“http://localhost:8080/my/services/ThreeWS?wsdl”): 

webService 从入门到精通,一起打包了

下面按照上面的方法生成客户端,测试就可以了。两种版本不一样,不能互相访问,可能生成策略不一样。所以需要注意!