webservice(一) 初涉
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.wa.jaxws.SayHello is not found. Have you run APT to generate them? at com.sun.xml.internal.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:256) at com.sun.xml.internal.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:567) at com.sun.xml.internal.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:514) at com.sun.xml.internal.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:341) at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:227) at com.sun.xml.internal.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:308) at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:174) at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:420) at com.sun.xml.internal.ws.api.server.WSEndpoint.create(WSEndpoint.java:439) at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(EndpointImpl.java:208) at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:138) at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:90) at javax.xml.ws.Endpoint.publish(Endpoint.java:170) at com.wa.ServerTest.main(ServerTest.java:9)
原因
cxf需要jaxws-api-2.1.jar及jaxb-api-2.1.jar的支持。
解决办法
1. 检查项目里是否有上述相关Jar包,如果没有,将cxf所需的2.1的jar复制一份到jdk目录下的jre\lib\endorsed文件夹中。如果endorsed文件夹不存在,可新建。
2. 项目里是有上述相关Jar包,还需要在public class XXX类上方加入@SOAPBinding(style = SOAPBinding.Style.RPC);
3. JDK升级到1.6.0.22版本以上;
定义接口方法: @WebService public interface HelloInt { @WebMethod public String sayHello(String name ); } 定义实现类: @WebService @SOAPBinding(style = SOAPBinding.Style.RPC) public class HelloImpl implements HelloInt { @Override public String sayHello(String name) { return "hello,"+name; } } 测试方法: public class ServerTest { public static void main(String[] args) { String address = "http://192.168.1.100:8989/d01ws/hello"; Endpoint.publish(address,new HelloImpl()); System.out.println("webservice发布成功"); } }
运行程序:
在浏览器地址栏输入:http://192.168.1.100:8989/d01ws/hello?wsdl
可以看到内容,发布成功:
<?xml version="1.0" encoding="UTF-8"?> @namespace html url(http://www.w3.org/1999/xhtml); :root { font:small Verdana; font-weight: bold; padding: 2em; padding-left:4em; } * { display: block; padding-left: 2em; } html|style { display: none; } html|span, html|a { display: inline; padding: 0; font-weight: normal; text-decoration: none; } html|span.block { display: block; } *[html|hidden], span.block[html|hidden] { display: none; } .expand { display: block; } .expand:before { content: ‘+‘; color: red; position: absolute; left: -1em; } .collapse { display: block; } .collapse:before { content: ‘-‘; color: red; position: absolute; left:-1em; } <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.1.1 in JDK 6. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.1.1 in JDK 6. --> <definitions name="HelloImplService" targetNamespace="http://wa.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://wa.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"><?XML:NAMESPACE PREFIX = [default] http://schemas.xmlsoap.org/wsdl/ NS = "http://schemas.xmlsoap.org/wsdl/" /><types/><message name="sayHello"><part name="arg0" type="xsd:string"/></message><message name="sayHelloResponse"><part name="return" type="xsd:string"/></message><portType name="HelloImpl"><operation name="sayHello" parameterOrder="arg0"><input message="tns:sayHello"/><output message="tns:sayHelloResponse"/></operation></portType><binding name="HelloImplPortBinding" type="tns:HelloImpl"><soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/><operation name="sayHello"><soap:operation soapAction=""/><input><soap:body namespace="http://wa.com/" use="literal"/></input><output><soap:body namespace="http://wa.com/" use="literal"/></output></operation></binding><service name="HelloImplService"><port name="HelloImplPort" binding="tns:HelloImplPortBinding"><soap:address location="http://192.168.1.110:8989/d01ws/hello"/></port></service></definitions>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。