实例步骤 第一步在myeclipse中新建一个web项目名为webservicetest并导入依赖的jar包(cxfspringapachecommons相关)
commonsloggingjar
cxfjar
geronimojaxws__specjar
geronimowsmetadata__specjar
neethijar
cxf结合spring时所需jar包此例子也需要这些用到了spring上下文加载
springasmRELEASEjar
springbeansRELEASEjar
springcontextRELEASEjar
springcoreRELEASEjar
springexpressionRELEASEjar
springaopRELEASEjar
springwebRELEASEjar
xmlschemacorejar
jaxbapijar
wsdljjar
jsr_apijar
commonannotationsjar
jaxbimpljar
staxapijar
wstxasljar
jettyutilvjar
jettycontinuationvjar
jetty
jettyiovjar
jettysecurityvjar
jettyservervjar
@WebService和@WebMethod是WSDL映射Annotation这些Annotation将描述Web Service的WSDL文档元素和JAVA源代码联系在一起
@WebService annotation的元素nameserviceName和targetNamespace成员用来描述wsdl:protTypewsdl:service和targetNameSpace生成WebService中的WSDL文件
@SOAPBinding是一个绑定的annotation用来说明网络协议和格式
@SOAPBinding是一个用来描述SOAP格式和RPC的协议的绑定Annotation
@WebMethod Annotation的operationName成员描述了wsdl:operation而且它的操作描述了WSDL文件中的SOAPAction头部这是客户端必须要放入到SOAPHeader中的数值SOAP中的一种约束
@WebParam Annotation的partName成员描述了WSDL文档中的wsdl:part
@WebResult Annotation的partName成员描述了wsdl:part用来返回WSDL文档的值
第二步创建webservice接口及实现类(下面为Java代码)
创建HelloWorld接口
View Code
@WebServicepublic interface HelloWorld {
@WebMethod
String sayHi(@WebParam(name=text)String text)
@WebMethod
String sayHiToUser(User user)
@WebMethod
String[] SayHiToUserList(List<User> userList)}
第三步创建HelloWorldImpl实现类
View Code
@WebService(endpointInterface = demospringserviceHelloWorld serviceName = HelloWorld)//endpointInterface表示该类就必须实现此接口所有方法serviceName表示webservice的服务名称public class HelloWorldImpl implements HelloWorld {
Map<Integer User> users = new LinkedHashMap<Integer User>()
@WebMethod
public String sayHi(String text) {
return Hello + text;
}
@WebMethod
public String sayHiToUser(User user) {
usersput(userssize() + user)
return Hello + usergetName()
}
@WebMethod
public String[] SayHiToUserList(List<User> userList) {
String[] result = new String[userListsize()];
int i = ;
for (User u : userList) {
result[i] = Hello + ugetName()
i++;
}
return result;
}}
第四步启动webserviceAppjava访//localhost:/helloWorld?WSDL
View Code
public class WebServiceApp {
public static void main(String[] args) {
Systemoutprintln(web service start)
HelloWorldImpl implementor= new HelloWorldImpl()
String address=//localhost:/helloWorld;
Endpointpublish(address implementor)
Systemoutprintln(web service started)
}}
第五步在webxml中加入cxf相应配置内容如下
View Code
<!cxf start> <!用于加载applicationContextxml配置信息>
<contextparam>
<paramname>contextConfigLocation</paramname>
<paramvalue>WEBINF/classes/applicationContextxml</paramvalue>
</contextparam>
<!使用spring ContextLoaderListener 加载applicationContextxml>
<listener>
<listenerclass>orgsprntextContextLoaderListener</listenerclass>
</listener> <!配置CXFServlet>
<servlet>
<servletname>CXFServlet</servletname>
<displayname>CXF Servlet</displayname>
<servletclass>orgapachecxftransportservletCXFServlet</servletclass>
<loadonstartup></loadonstartup>
</servlet>
<servletmapping>
<servletname>CXFServlet</servletname>
<! url可自定义配置用于CXFServlet请求地址拦截访问会用到 >
<urlpattern>/webservice/*</urlpattern>
</servletmapping> <!cxf end >
第六步在src中创建基本的applicationContextxml内容如下(作用主要做webservice接口属性配置通过webxml配置加载)
View Code
<?xml version= encoding=UTF?><beans xmlns=
xmlns:xsi=instance
xmlns:jaxws=
xsi:schemaLocation=
beansxsd
>
<import resource=classpath:METAINF/cxf/cxfxml />
<import resource=classpath:METAINF/cxf/cxfextensionsoapxml />
<import resource=classpath:METAINF/cxf/cxfservletxml /><!id:名称(随意配)implementor:指定接口具体实现类address:随意配>
<jaxws:endpoint id=helloWorld
implementor=demospringserviceHelloWorldImpl
address=/HelloWorld /> <! WebService 客户端 spring 配置文件cxf与Spring集成cxf里提供了一个工厂类orgapachecxfjaxwsJaxWsProxyFactoryBean可以方便实现的调用WebServiceserviceClass属性是接口类address是webService的路径在其他bean里如果要调用webservice只要将client这个bean注入到需要使用的bean里>
<bean id=client class=demospringserviceHelloWorld
factorybean=clientFactory factorymethod=create />
<bean id=clientFactory
class=orgapachecxfjaxwsJaxWsProxyFactoryBean>
<property name=serviceClass
value=demospringserviceHelloWorld />
<property name=address
value=//localhost:/webservices/HelloWorld />
</bean></beans>
第七步发布webservice到tomcat
Java代码验证WSDL是否发布成功
如果项目发布放在/webapps/ROOT下时
访//IP地址端口/webservices/{applicationContentxml中配置的address}?wsdl
//webservices对应webxml中的<urlpattern>/webservices/*</urlpattern>验证是否能正常看到xml格式的页面
第八步测试
View Code
public class HelloWorldClient {
public static void main(String[] args) {
/**
* 简单的用ApplicationContext做测试的话获得Spring中定义的Bean实例(对象)可以用以下方法
* ClassPathXmlApplicationContext[只能读放在webinfo/classes目录下的配置文件]
*/
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { applicationContextxml })
HelloWorld client = (HelloWorld) contextgetBean(client)
User user = new User()
usersetName(Tony)
usersetDescription(test)
String str = clientsayHiToUser(user)
Systemoutprintln(str)
}}