Java,JAX-WS我不明白wsimport生成的一些类是什么



我对wsimport工具从JAX-WS API为客户端应用程序生成的3个类有一些理解上的问题。

使用@WebService上课,如下所示:

@WebService
public class HelloService
{
@WebMethod
public String sayHelloTo(String name)
{
return "Hello " + name;
}
}

我发布代码:

Endpoint.publish(address, new HelloService());

当我通过wsimport生成客户端的存根时,如下所示:

wsimport -p client.hello -keep -Xnocompile http://localhost/service-name?wsdl 

我得到的文件如下:

HelloService.java
HelloServiceService.java
ObjectFactory.java
package-info.java
SayHelloTo.java
SayHelloToResponse.java

问题是我不明白,也找不到类的答案:ObjectFactory、SayHelloTo、SayHelloToResponse。我不明白,因为当我创建这些文件时,客户端应用程序工作正常。起初,我以为它是由JAX-WS引擎用来生成SOAPMessage的,但当我对它进行建模并运行客户端应用程序时,我就崩溃了。

客户端代码尽可能简单:

public class Main
{
public static void main(String[] args) throws Exception
{
HelloServiceService service = new HelloServiceService();
HelloService helloService = service.getHelloServicePort();

System.out.println(helloService.sayHelloTo("Adam"));
}
}

也许您需要更多地了解WSDL的含义及其组成部分?

  • SayHelloToSayHelloToResponse对应于请求/响应消息定义。(您必须将它们与适当的XSD定义放在一起(只要您的代码不使用它们,代码就可以在没有它们的情况下工作。

  • 在您的案例中,HelloServiceService是WSDL中服务定义中的WebService存根(这就是为什么wsimport在名称中添加了"service">

  • HelloService是WSDL的绑定端口存根,您可以通过调用'getHelloServicePort((;'

  • ObjectFactory是JAXB可选的助手类,具有根据XSD定义创建对象的新实例的方法。使用SayHelloTo request = new SayHelloTo();要好得多(并且建议使用(

BTW这不是完整的答案,我想我错过了更多的细节。。。但也许这会帮助你开始。

UPD:看看你的WSDL,一定有类似的东西(不是必须的,但有点像(

<service name="HelloService">
<port name="HelloService" ...>
...
</port>
</service>
<portType name="HelloService">
<operation name="sayHelloTo">      
<input name="sayHelloTo" message="tns:sayHelloTo" />
<output name="sayHelloToResponse" message="tns:sayHelloToResponse" />
</operation>
</portType>
<message name="sayHelloTo">
<part name="RequestMessage" element="SayHelloTo" />
</message>
<message name="sayHelloToResponse">
<part name="ResponseMessage" element="SayHelloToResponse" />
</message>

在Schema部分可以是类似于:

<xsd:element name="SayHelloTo" type="{some type definition}"/>
<xsd:element name="SayHelloToResponse" type="{some type definition}"/>

或类型可以在这些元素中定义("俄罗斯娃娃"结构(这是CCD_ 7和CCD_。

但是您在的Web服务实现

@WebMethod
public String sayHelloTo(String name)
{
return "Hello " + name;
}

不使用这些类,所以当您手动删除它们时,不会发生任何事情。。。

至少我是这么理解的…

最新更新