我正在尝试Apache最简单的“Hello World”网络服务(http://cxf.apache.org/docs/a-simple-jax-ws-service.html);我故意改变它以了解更多关于如何做事而不是仅仅复制所有代码。
我的服务实现指定它在包“hw”中实现的接口:
@WebService(endpointInterface = "hw.HelloWorld", serviceName = "HelloWorld")
“发布”Web服务的程序(我收集它意味着作为服务器运行)在其自己的(非常正确的)包中实现:
HelloWorldImpl implementor = new hwimpl.HelloworldImpl();
Endpoint.publish("http://localhost:9000/helloworld", implementor);
然后睡5分钟,在此期间,指令说放入浏览器的URL显示WSDL。这很有用。
http://localhost:9000/helloWorld?wsdl
我的客户有:
private static final QName SERVICE_NAME
= new QName("http://server.hw.demo/", "HelloWorld");
private static final QName PORT_NAME
= new QName("http://server.hw.demo/", "HelloWorldPort");
// the following in a method, of course
String endpointAddress = "http://localhost:9000/helloWorld";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld.class);
System.out.println(hw.sayHi("Albert"));
我不知道SERVICE_NAME和PORT_NAME如何与我的服务相关。 “server.hw.demo”字符串来自示例,并不对应于我的代码中的包,或者似乎用于命名空间的“反向”包;他们应该吗?它们对应的是什么?我的代码中没有任何内容,除了这里,使用“server.hw.demo”;应该是什么字符串?
我的实现和界面在不同的类中是否重要?
我的客户端不起作用,我将其作为一个问题发布,但它很长,没有人对此作出回应。我正在努力理解这一部分;在我看来,最可能的罪魁祸首。如果我知道如何,我会删除另一个问题。
答案 0 :(得分:0)
Target namespace http://javatips.net/static/images/cxf-rest-soap.png
在屏幕截图上方,您可以看到目标命名空间http://student.com
,这是因为我们将包创建为com.student
。
目标命名空间必须与java包的顺序相反,还需要在包
http://
参考我的博客:
http://javatips.net/blog/2012/04/expose-cxf-service-with-rest-and-soap