说起WebService很多人都会觉得很复杂,你可能需要一个axis2或CXF之类的框架,还要做一大堆的配置,不过现在使用JAXWS2.0规范来发布一个web服务已经非常简单了。当然最新的CXF也是JAXWS的实现,我们这里给出的非常简单的小例子只要使用JSE6.0就搞定了(我使用的是JDK6update12版本)。
首先编写要发布成服务的类:
package jaxwsserver;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService()
public class SeManager {
public String greetings(@WebParam(name="username") String name){
return "hello"+name;
}
}
关键是标注部分。
然后还需要生成一些辅助的类,到编译后的class的根目录下运行如下的命令:
wsgen -classpath . jaxwsserver.SeManager
会在包jaxwsserver.jaxws下生成Greetings.class和GreetingsResponse.class两个类文件。至于内容就不关心它了,确保他们在classpath中就可以了。下面我们写一个小服务器来发布这个web服务:
package jaxwsserver;
import javax.xml.ws.Endpoint;
public class Server {
public static void main(String[] args){
Endpoint.publish("http://localhost:9090/se", new SeManager());
}
}
运行这个Server类然后再浏览器中访问http://localhost:9090/se?wsdl这个地址看看WSDL:
<?xml version="1.0" encoding="UTF-8"?> <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --> <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://jaxwsserver/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://jaxwsserver/" name="SeManagerService"> <types> <xsd:schema> <xsd:import namespace="http://jaxwsserver/" schemaLocation="http://localhost:9090/se?xsd=1"/> </xsd:schema> </types> <message name="greetings"> <part name="parameters" element="tns:greetings"/> </message> <message name="greetingsResponse"> <part name="parameters" element="tns:greetingsResponse"/> </message> <portType name="SeManager"> <operation name="greetings"> <input message="tns:greetings"/> <output message="tns:greetingsResponse"/> </operation> </portType> <binding name="SeManagerPortBinding" type="tns:SeManager"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="greetings"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="SeManagerService"> <port name="SeManagerPort" binding="tns:SeManagerPortBinding"> <soap:address location="http://localhost:9090/se"/> </port> </service> </definitions>
看到以上的结果就说明服务发布成功了。是不是很简单呢?