今天开始使用java1.6的注解构建一个webservice,完成创建,调用一套;好了废话少说,开始码代码。
1.创建一个webservice与部署
package cn.thinknet.server.core.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import cn.thinknet.utils.log.AKLoggerUtil;
import cn.thinknet.utils.webservice.DeployWebService;
@WebService(serviceName = "TnUserInterface", targetNamespace = "http://think-net.cn/TnUserInterface")
public class UserInterface
{
public static final int ADD = 1;
public static final int DEL = 2;
public static final int UPD = 3;
public static final String SYNC_SUCCESS = "ok";
public static final String SYNC_FAILED = "NO";
@WebMethod(action = "SyncUser")
public String syncUser(@WebParam(name = "action")
int action, @WebParam(name = "data")
String data)
{
boolean syncFlag = true;
switch (action)
{
case ADD:
syncFlag = addUser(data);
break;
case DEL:
syncFlag = delUser(data);
break;
case UPD:
syncFlag = updateUser(data);
break;
default:
AKLoggerUtil.getInstance().writeInfoLog(
"[Sync User]Don't know what you're doing.");
break;
}
return syncFlag ? SYNC_SUCCESS : SYNC_FAILED;
}
/**
* 添加用户
* @param data 用户信息
*
* @return boolean 是否同步成功
*/
private boolean addUser(String data)
{
boolean flag = true;
if(flag)
{
AKLoggerUtil.getInstance().writeInfoLog("[User]sync add user success.");
}
return flag;
}
/**
* 添加删除用户
* @param data 用户id
*
* @return boolean 是否同步成功
*/
private boolean delUser(String data)
{
boolean flag = true;
if(flag)
{
AKLoggerUtil.getInstance().writeInfoLog("[User]sync delete user success.");
}
return flag;
}
/**
* 更新用户
* @param data 用户信息Json对象
*
* @return boolean 是否同步成功
*/
private boolean updateUser(String data)
{
boolean flag = true;
if(flag)
{
AKLoggerUtil.getInstance().writeInfoLog("[User]sync update user success.");
}
return flag;
}
public static void main(String[] args)
{
// 部署webservice
DeployWebService.deployWebService("127.0.0.1", 11023, "/thinknet/TnUserInterface", new UserInterface());
}
}
2.部署工具类
package cn.thinknet.utils.webservice;
import javax.xml.ws.Endpoint;
import cn.thinknet.utils.log.AKLoggerUtil;
public class DeployWebService
{
public static final String Http_Protocol = "http";
public static void deployWebService(String hostName, int port,
String serviceName, Object obj)
{
AKLoggerUtil.getInstance().writeInfoLog(
"Deploy webservice,service class name:"
+ obj.getClass().getName());
String address = Http_Protocol + "://" + hostName + ':'
+ String.valueOf(port) + serviceName;
Endpoint.publish(address, obj);
}
}
3.创建部署完成,下面开始调用,可以先用浏览器查看生成的wsdl报文结构,在浏览器输入这个地址:【http://127.0.0.1:11023/thinknet/TnUserInterface?wsdl】,查看结果如下:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://think-net.cn/TnUserInterface" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="TnUserInterface" targetNamespace="http://think-net.cn/TnUserInterface">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://think-net.cn/TnUserInterface" elementFormDefault="unqualified" targetNamespace="http://think-net.cn/TnUserInterface" version="1.0">
<xs:element name="syncUser" type="tns:syncUser"/>
<xs:element name="syncUserResponse" type="tns:syncUserResponse"/>
<xs:complexType name="syncUser">
<xs:sequence>
<xs:element name="action" type="xs:int"/>
<xs:element minOccurs="0" name="data" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="syncUserResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="syncUser">
<wsdl:part element="tns:syncUser" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="syncUserResponse">
<wsdl:part element="tns:syncUserResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="UserInterface">
<wsdl:operation name="syncUser">
<wsdl:input message="tns:syncUser" name="syncUser">
</wsdl:input>
<wsdl:output message="tns:syncUserResponse" name="syncUserResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TnUserInterfaceSoapBinding" type="tns:UserInterface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="syncUser">
<soap:operation soapAction="SyncUser" style="document"/>
<wsdl:input name="syncUser">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="syncUserResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TnUserInterface">
<wsdl:port binding="tns:TnUserInterfaceSoapBinding" name="UserInterfacePort">
<soap:address location="http://127.0.0.1:11023/thinknet/TnUserInterface"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
4.采用CXF包调用,CXF调用webservice所需要的jar,请在附件中自行下载,代码如下:
public static void main(String[] args) throws Exception
{
org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory dcf = org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory
.newInstance();
org.apache.cxf.endpoint.Client client = dcf
.createClient("http://127.0.0.1:11023/thinknet/TnUserInterface?wsdl");
// sayHello 为接口中定义的方法名称 张三为传递的参数 返回一个Object数组
Object[] objects = client.invoke("syncUser", 1, "test");
// 输出调用结果
System.out.println("==================>" + objects[0].toString());
}
5.这里列出需要的jar名称,方便亲们定位:
- cxf-2.6.13.jar
- jetty-continuation-7.5.4.v20111024.jar
- jetty-http-7.5.4.v20111024.jar
- jetty-io-7.5.4.v20111024.jar
- jetty-server-7.5.4.v20111024.jar
- jetty-util-7.5.4.v20111024.jar
- neethi-3.0.3.jar
- stax2-api-3.1.1.jar
- woodstox-core-asl-4.2.0.jar
- wsdl4j-1.6.3.jar
- ezmorph-1.0.4.jar
- xmlschema-core-2.0.3.jar
6.下面使用SOAPUI专业软件测试一下我们这个webservice吧!请看下图: