web前端

位置:IT落伍者 >> web前端 >> 浏览文章

使用cxf写web service的简单实例


发布日期:2019年12月13日
 
使用cxf写web service的简单实例
实例步骤

第一步在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)

}}

               

上一篇:Apusic AS的Web应用中调用commons-logging

下一篇:设计移动Web服务需要考虑的三个设计层次