1、常用注解说明
@WebService-定义服务,在类的上面
参数:
- targetNamespace:指定命名空间
- name:portType的名称
- portName:port的名称
- serviceName:服务名称
- endpointInterface:SEI接口地址,如果一个服务类实现了多个接口,只需要发布一个接口的方法,可通过此注解指定要发布服务的接口。
@WebMethod-定义在公开方法上边
参数:
- operationName:方法名
- exclude:设置为true表示此方法不是webservice方法,反之则表示webservice方法,默认是false
@WebResult-定义返回值,在方法返回值前边
参数:
name:返回结果值的名称
@WebParam-定义参数,在方法参数前边
参数:
name:指定参数的名称
@Path-定义在类名之上,也可以定义在方法名上。该注解接收一个value参数,表示定义资源的地址(等价于RequestMapping)。
@Consumes-指定http请求的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型。
@Produces-指定http响应的MIME类型,默认是*/*,表示任意的MIME类型。该注解的值是数组类型,支持多个MIME类型,可以使用MediaType来指定MIME类型。
@SOAPBinding 有以下三种方式
- 1)Document Wrapped:@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
- 2)Document Bare:@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,parameterStyle=SOAPBinding.ParameterStyle.BARE)
- 3)RPC:@SOAPBinding(style=SOAPBinding.Style.RPC,use=SOAPBinding.Use.LITERAL,parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
2、创建WebService服务接口
package org.gogetter.test;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;
import javax.jws.soap.SOAPBinding.Style;
import javax.jws.soap.SOAPBinding.Use;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
//@Path("/jctest_service/")
//@Consumes("application/xml")
//@Produces("application/xml")
@WebService(targetNamespace="http://idempiere.org/ADInterface/1_0")
@SOAPBinding(style=Style.RPC,use=Use.LITERAL,parameterStyle=ParameterStyle.WRAPPED)
public interface JCTestService {
/**
*
* @param reqs
* @return CompositeResponsesDocument
*/
//@POST
//@Path("/user/select")
public @WebResult(name="result") String selectUser(@WebParam(name="Name") String name, @WebParam(name="pass") String pass);
}
3、实现WebService服务接口
package org.gogetter.test;
import javax.jws.WebService;
import org.idempiere.webservices.AbstractService;
@WebService(endpointInterface = "org.gogetter.test.JCTestService", serviceName = "jctest" ,targetNamespace="http://idempiere.org/ADInterface/1_0")
public class JCTest extends AbstractService implements JCTestService{
@Override
public String selectUser(String name,String pass) {
// TODO Auto-generated method stub
System.out.println("----------hellow----------");
//返回内容可自己定义
return "Name:"+name+";pass:"+pass;
}
}
4、将服务实现类在service.xml中声明
<jaxws:endpoint id="jctest" address="/jctest" implementor="org.gogetter.test.JCTest" >
<jaxws:dataBinding>
<bean class="org.apache.cxf.xmlbeans.XmlBeansDataBinding" >
</bean>
</jaxws:dataBinding>
</jaxws:endpoint>
注:id要和步骤3的 servicename 保持一致
5、重启服务并浏览地址,查看wsdl是否发布成功
如过出现wsdl文件则证明服务发布成功
6、WebService接口发布
6.1、打开SoapUI 工具
6.2、新增一个SOAP项目并输入发布的wsdl路径
6.3 点击OK,会发现左边新增了一个项目,然后点击请求(Request),点击运行按钮,查看右边的响应数据,如果未报错误则表示客户端掉用正常
注:本教程只是简单demo,供人入门使用,少走弯路。