Java、JAX-WS我不明白wsimport生成的类是什么
我在理解wsimport工具从JAX-WSAPI为客户端应用程序生成的3个类时遇到一些问题 使用@WebService创建类,如下所示:Java、JAX-WS我不明白wsimport生成的类是什么,java,web-services,jakarta-ee,soap,jax-ws,Java,Web Services,Jakarta Ee,Soap,Jax Ws,我在理解wsimport工具从JAX-WSAPI为客户端应用程序生成的3个类时遇到一些问题 使用@WebService创建类,如下所示: @WebService public class HelloService { @WebMethod public String sayHelloTo(String name) { return "Hello " + name; } } 我按代码发布它: Endpoint.publish(address, ne
@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,sayHellotResponse。我不明白,因为当我删除这些文件时,客户端应用程序工作正常。首先,我认为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代表什么以及它的各个部分
和SayHelloTo
对应于请求/响应消息定义。 (必须使用适当的XSD定义将它们放在那里) 只要你的代码不使用它们,没有它们的代码就可以工作sayHellotResponse
在您的例子中,它是WSDL中服务定义中的WebService存根(这就是为什么wsimport在名称后面加上“service”)HelloServiceService
是从WSDL绑定端口存根,您可以通过调用 'getHelloServicePort();'HelloService
是JAXB可选的助手类,它具有根据XSD定义创建对象新实例的方法。使用它比使用ObjectFactory
SayHelloTo request=new SayHelloTo();
至少这是我对它的理解…谢谢你的回答。你是否可以更详细地解释这一部分:“SayHelloTo和SayHellotResponse对应于请求/响应消息定义。(你必须在那里有相应的XSD定义)我知道什么是XSD for WSDL文件,所以您必须解释这一点,我知道类是这个XSD模式的映射。
<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>
<xsd:element name="SayHelloTo" type="{some type definition}"/>
<xsd:element name="SayHelloToResponse" type="{some type definition}"/>
@WebMethod
public String sayHelloTo(String name)
{
return "Hello " + name;
}