一、使用jdk自带的JAX-WS创建webservice服务端
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(
// 必须指定命名空间
targetNamespace = "http://com.test"
)
public class Webservice {
@WebMethod
public String say(String xml) {
return "返回值";
}
public static void main(String[] args) {
// 注意不要用正在使用的端口号,并且要以"/"结尾
String address = "http://localhost:8080/";
// 运行main方法,发布服务端
Endpoint.publish(address, new Webservice());
}
}
也可以用spring代理发布服务端:dispatch-servlet.xml中加上
<bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter">
<property name="baseAddress" value="http://localhost:8081/"></property>
</bean>
jax-ws发布服务端是绑定端口的,所以使用 locahost:8080/?wsdl 即能访问。
缺点是一个端口只能发布一个webservice服务类。
二、使用axis2发布webservice
axis2版本:1.7.9
1、引入axis2依赖的jar包
如果使用maven,则依赖如下(因为axis2-adb依赖axis2-kernel,所有会自动引入,可省略)
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-adb</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.7.9</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.7.9</version>
</dependency>
如果使用jar,则引入如下jar包:
2、创建services.xml
在WEB-INF文件夹下创建文件如下:services - XXX(任意文件名)- META-INF - services.xml。
axis2会自动寻找WEB-INF下的services目录,再下下层目录的META-INF目录中的services.xml。
注意:此为axis2要求的固定结构,必须3层目录,否则读取不到services.xml
比如我的:
services.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<service name="Axis2Ws(定义Webservice服务名称为Axis2Ws)" scope="application">
<description>Axis2Ws服务说明</description>
<!-- 定义默认消息接收方式:rpc(远程方法调用) -->
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/ns/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/ns/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<!-- 指定服务类,发布该类的所有方法,并且应用messageReceivers中定义的消息接收方式 -->
<parameter name="ServiceClass">Webservice类全名(一个普通的java类即可)</parameter>
</service>
(service标签上scope属性是用来定义生命周期的)
如果同时发布多个webservice,可以在service标签外加上serviceGroup如下
<serviceGroup>
<service name="service1">
...
</service>
<service name="service2">
...
</service>
</serviceGroup>
3、配置axisServlet映射
在web.xml中加上servlet映射
<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>
<!-- 接受/services请求url -->
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
至此axis2服务端配置全部完成,启动web程序,使用如下地址访问wsdl
http://localhost:端口/项目名称/services/Axis2Ws?wsdl