- 两种实现第一种RS
定义接口类
public interface ExampleRestfulI {
/**
* url:http://localhost:port/ssh-webservice/api/restful/v1/example/findResponse
* @return
*/
@Path("/findResponse")
@GET public Response findResponse();
/**
* @QueryParam 测试
* url:http://localhost:port/ssh-webservice/api/restful/v1/example/page? from=1&to=10&order=abcd
* @param from
* @param to
* @return
*/
@Path("/page")
@GET public Response getFrom(
@QueryParam("from")int from,
@QueryParam("to")int to,
@QueryParam("order")List<String> order);
/**
* @MatrixParam 测试
* url:http://localhost:port/ssh-webservice/api/restful/v1/example/matrix/2016;author=tom;country=china
* @param year
* @param author
* @param country
* @return
*/
@Path("/matrix/{year}")
@GET public Response getMatrix(@PathParam("year")String year,
@MatrixParam("author")String author,
@MatrixParam("country")String country);
/**
* @HeaderParam 测试
* 获取http头信息
* url:http://localhost:port/ssh-webservice/api/restful/v1/example/getHeader
* @param userAgent
* @return
*/
@Path("/getHeader")
@GET public Response getHeader(@HeaderParam("user-agent")String userAgent);
}
实现类
@Component
public class ExampleRestfulImpl implements ExampleRestfulI{
// 日志
private static final Logger LOGGER = LoggerFactory.getLogger(ExampleRestfulImpl.class);
@Override
public Response findResponse() {
LOGGER.info("findResponse...");
return Response.ok().entity("").build();
}
@Override
public Response getFrom(int from, int to, List<String> order) {
LOGGER.info("getFrom...");
return Response.ok().entity("from "+from+" to "+to+" order by "+order.toString()).build();
}
@Override
public Response getMatrix(String year, String author, String country) {
LOGGER.info("getMatrix...");
return Response.ok().entity("year:"+year+",author:"+author+",country:"+country).build();
}
@Override
public Response getHeader(String userAgent) {
LOGGER.info("getHeader...");
return Response.ok().entity(userAgent).build();
}
}
实现效果如下
<?xml version="1.0" encoding="utf-8"?>
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<grammars/>
<resources base="http://localhost/ssh-webservice/api/restful/v1/example">
<resource path="/">
<resource path="findResponse">
<method name="GET">
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="getHeader">
<method name="GET">
<request>
<param name="user-agent" style="header" type="xs:string"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="matrix/{year}">
<param name="year" style="template" type="xs:string"/>
<param name="author" style="matrix" type="xs:string"/>
<param name="country" style="matrix" type="xs:string"/>
<method name="GET">
<request/>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="page">
<method name="GET">
<request>
<param name="from" style="query" type="xs:int"/>
<param name="to" style="query" type="xs:int"/>
<param name="order" style="query" repeating="true" type="xs:string"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
测试一下:http://127.0.0.1/ssh-webservice/api/restful/v1/example/getHeader
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
这里会返回你的客户端信息
第二种WS实现
@WebService(targetNamespace="http://soap.z201.cn")
public interface UserInfoSoap {
/**
* 获取所有用户信息
* @param userid
* @return
*/
@WebResult(name = "return")
@Action(input = "urn:findAllUsers", output = "urn:findAllUsersResponse")
@RequestWrapper(localName = "findAllUsers")
@WebMethod(operationName="findAllUsers",action = "urn:findAllUsers")
@ResponseWrapper(localName = "findAllUsersResponse")
public List<User> findAllUsers();
/**
* 获取单位信息
* @param userid
* @return
*/
@WebResult(name = "return")
@Action(input = "urn:findAllUnits", output = "urn:findAllUnitsResponse")
@RequestWrapper(localName = "findAllUnits")
@WebMethod(action = "urn:findAllUnits")
@ResponseWrapper(localName = "findAllUnitsResponse")
public List<Unit> findAllUnits();
/**
* 验证用户登陆信息
* @param userid
* @return
*/
@WebResult(name = "return")
@Action(input = "urn:verifyTheUser", output = "urn:verifyTheUserResponse")
@RequestWrapper(localName = "verifyTheUser")
@WebMethod(action = "urn:verifyTheUser")
@ResponseWrapper(localName = "verifyTheUserResponse")
public boolean verifyTheUser(@WebParam(name="loginName")String loginName,@WebParam(name="password")String password);
}
接口实现类
@Component
public class UserInfoSoapImpl implements UserInfoSoap {
// 日志
private static final Logger LOGGER = LoggerFactory.getLogger(UserInfoSoapImpl.class);
@Autowired
private IdentitySynchronousService identitySynchronousService;
@Override
public List<User> findAllUsers() {
LOGGER.info(UserInfoSoapImpl.class.getName()+"findAllUsers");
return identitySynchronousService.findUser();
}
@Override
public List<Unit> findAllUnits() {
LOGGER.info(UserInfoSoapImpl.class.getName()+"findAllUnits");
return identitySynchronousService.findUnits();
}
@Override
public boolean verifyTheUser(String loginName, String password) {
LOGGER.info(UserInfoSoapImpl.class.getName()+"verifyTheUser");
return identitySynchronousService.verifyTheUser(loginName, password);
}
}
实现效果
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:tns="http://soap.z201.cn" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="UserInfoSoapService" targetNamespace="http://soap.z201.cn">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" targetNamespace="http://soap.z201.cn" version="1.0">
<xs:element name="Unit" type="tns:unit"/>
<xs:element name="User" type="tns:user"/>
<xs:element name="findAllUnits" type="tns:findAllUnits"/>
<xs:element name="findAllUnitsResponse" type="tns:findAllUnitsResponse"/>
<xs:element name="findAllUsers" type="tns:findAllUsers"/>
<xs:element name="findAllUsersResponse" type="tns:findAllUsersResponse"/>
<xs:element name="verifyTheUser" type="tns:verifyTheUser"/>
<xs:element name="verifyTheUserResponse" type="tns:verifyTheUserResponse"/>
<xs:complexType name="findAllUsers">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="findAllUsersResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:user"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="user">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:string"/>
<xs:element minOccurs="0" name="userName" type="xs:string"/>
<xs:element minOccurs="0" name="jobNumber" type="xs:string"/>
<xs:element minOccurs="0" name="passWord" type="xs:string"/>
<xs:element minOccurs="0" name="unitName" type="xs:string"/>
<xs:element minOccurs="0" name="unitId" type="xs:string"/>
<xs:element minOccurs="0" name="sex" type="xs:string"/>
<xs:element minOccurs="0" name="state" type="xs:string"/>
<xs:element minOccurs="0" name="isDelete" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="verifyTheUser">
<xs:sequence>
<xs:element minOccurs="0" name="loginName" type="xs:string"/>
<xs:element minOccurs="0" name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="verifyTheUserResponse">
<xs:sequence>
<xs:element name="return" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="findAllUnits">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="findAllUnitsResponse">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:unit"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="unit">
<xs:sequence>
<xs:element minOccurs="0" name="unitName" type="xs:string"/>
<xs:element minOccurs="0" name="unitId" type="xs:string"/>
<xs:element minOccurs="0" name="address" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="verifyTheUserResponse">
<wsdl:part element="tns:verifyTheUserResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="findAllUnitsResponse">
<wsdl:part element="tns:findAllUnitsResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="findAllUsers">
<wsdl:part element="tns:findAllUsers" name="parameters"/>
</wsdl:message>
<wsdl:message name="verifyTheUser">
<wsdl:part element="tns:verifyTheUser" name="parameters"/>
</wsdl:message>
<wsdl:message name="findAllUsersResponse">
<wsdl:part element="tns:findAllUsersResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="findAllUnits">
<wsdl:part element="tns:findAllUnits" name="parameters"/>
</wsdl:message>
<wsdl:portType name="UserInfoSoap">
<wsdl:operation name="findAllUsers">
<wsdl:input message="tns:findAllUsers" name="findAllUsers" wsam:Action="urn:findAllUsers" wsaw:Action="urn:findAllUsers"/>
<wsdl:output message="tns:findAllUsersResponse" name="findAllUsersResponse" wsam:Action="urn:findAllUsersResponse" wsaw:Action="urn:findAllUsersResponse"/>
</wsdl:operation>
<wsdl:operation name="verifyTheUser">
<wsdl:input message="tns:verifyTheUser" name="verifyTheUser" wsam:Action="urn:verifyTheUser" wsaw:Action="urn:verifyTheUser"/>
<wsdl:output message="tns:verifyTheUserResponse" name="verifyTheUserResponse" wsam:Action="urn:verifyTheUserResponse" wsaw:Action="urn:verifyTheUserResponse"/>
</wsdl:operation>
<wsdl:operation name="findAllUnits">
<wsdl:input message="tns:findAllUnits" name="findAllUnits" wsam:Action="urn:findAllUnits" wsaw:Action="urn:findAllUnits"/>
<wsdl:output message="tns:findAllUnitsResponse" name="findAllUnitsResponse" wsam:Action="urn:findAllUnitsResponse" wsaw:Action="urn:findAllUnitsResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="UserInfoSoapServiceSoapBinding" type="tns:UserInfoSoap">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="findAllUsers">
<soap:operation soapAction="urn:findAllUsers" style="document"/>
<wsdl:input name="findAllUsers">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="findAllUsersResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="verifyTheUser">
<soap:operation soapAction="urn:verifyTheUser" style="document"/>
<wsdl:input name="verifyTheUser">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="verifyTheUserResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="findAllUnits">
<soap:operation soapAction="urn:findAllUnits" style="document"/>
<wsdl:input name="findAllUnits">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="findAllUnitsResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserInfoSoapService">
<wsdl:port binding="tns:UserInfoSoapServiceSoapBinding" name="UserInfoSoapPort">
<soap:address location="http://127.0.0.1/ssh-webservice/api/soap/v1"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
这里就不贴测试类了,网上有大把的。