简单的Web服务:将endpointname,servicename等放在一起

时间:2013-03-17 00:10:22

标签: java web-services cxf

我正在尝试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”;应该是什么字符串?

我的实现和界面在不同的类中是否重要?

我的客户端不起作用,我将其作为一个问题发布,但它很长,没有人对此作出回应。我正在努力理解这一部分;在我看来,最可能的罪魁祸首。如果我知道如何,我会删除另一个问题。

1 个答案:

答案 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