webService 从入门到精通,一起打包了
一、接口的初级写法
可以直接用Eclipse建立一个项目。Flie--->New--->Other---->Dynamic Web Project(java普通项目也可以,我个人喜欢用web项目)
---->输入Project name 其他默认,点下一步就可以了----->在Default output folder输入WebContent\WEB-INF\classes--->项目创建结束。
2、开始编写接口方法(包和类文件创建完毕的情况下)
在编写的类的上方需要添加"@WebService"
然后是方法编写的部分:
注意:::这里的方法是提供给人调用的接口,必须要是public修饰。
最后是接口的发布:
运行结果:
注意这里图片中的右上方的小框不能点掉了,不然接下来的测试是看不到结果的!!!!
下面是看发布的成功生成的wsdl文件 在浏览器中输入发布的地址加“?wsdl”就可以了(我的--(http://localhost:8080/service/function?wsdl)--)
2、用这里查看wsdl文件的地址自动生成客户端
首先依照上面的说的步骤新建另一个项目
鼠标点中这个新的项目,然后在项目上点击右键 New-->Other-->选择Web Service Client
直接点击下一步在Service definition中上面提到的地址复制到这里“http://localhost:8080/service/function?wsdl”直接点击Finish
生成的客户端代码:
这里将生成的test包删掉这里用不到
测试代码的编写
点击运行就可以等待结果了。(这里等待结果一般时间都会很长)
这就是初级的接口
二、利用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命令启动
启动成功
在浏览器地址栏中输入如下的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里面指定的服务名
我的项目地址:http://localhost:8080/webservices/services/ThreeWS?wsdl
接下来生成客户端:可以按照初级教程的方法生成客户端
编写测试类:
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>
用tomcat运行项目 并访问wsdl文件(“http://localhost:8080/my/services/ThreeWS?wsdl”):
下面按照上面的方法生成客户端,测试就可以了。两种版本不一样,不能互相访问,可能生成策略不一样。所以需要注意!