Java 关于web服务的困惑

Java 关于web服务的困惑,java,web-services,jax-ws,wsimport,Java,Web Services,Jax Ws,Wsimport,我们在Tomcat服务器上运行一些现有的Java代码,我们希望允许在另一台机器上执行这些代码,因此我们正在研究web服务。我不熟悉web服务,我想我可能在这里做错了什么 我已经学习了一些关于如何在Tomcat中部署JAX-WSWeb服务的在线教程。我创建了一个web服务类,并用@WebService对其进行注释,编写了一个web.xml和sun-jaxws.xml文件,将这些文件(加上JAX-WSJAR文件)打包成一个.war文件,并将其部署到Tomcat中。这似乎是可行的,因为我可以在指向To

我们在Tomcat服务器上运行一些现有的Java代码,我们希望允许在另一台机器上执行这些代码,因此我们正在研究web服务。我不熟悉web服务,我想我可能在这里做错了什么

我已经学习了一些关于如何在Tomcat中部署JAX-WSWeb服务的在线教程。我创建了一个web服务类,并用@WebService对其进行注释,编写了一个web.xml和sun-jaxws.xml文件,将这些文件(加上JAX-WSJAR文件)打包成一个.war文件,并将其部署到Tomcat中。这似乎是可行的,因为我可以在指向Tomcat的浏览器中加载WSDL文件

我遇到问题的是web服务客户端。首先,服务器端存在映射到数据库的现有类。我们希望允许客户机使用这些相同的现有类并从中创建实例,调用web服务,然后将对象存储到数据库中。然而,当我对服务器的WSDL文件运行wsimport命令时,它生成了一组Java类,其中许多类与我们现有的类相似。我想我们必须使用这些,而不是我们现有的类?代码重用就这么多了,除非我感到困惑,这是很有可能的

现在我已经使用wsimport生成的类编写了客户机。但我有编译错误。我们现有Java类中的一些字段的类型是Java.net.InetAddress。但出于某种原因,wsimport生成了自己的InetAddress类,它看起来是这样的:

package ems.server.webservices;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inetAddress")
public class InetAddress {
}
是的,这只是一节没有任何内容的课!因此,我收到了很多编译错误,比如:

WSClient.java:37: setAddress(ems.server.webservices.InetAddress) in ems.server.webservices.NetworkAddress cannot be applied to (java.net.InetAddress)
    networkAddress.setAddress(InetAddress.getByName("1.1.1.1"));
我试图创建一个java.net.InetAddress,但它希望我使用wsimport生成的空类。我一定是做错了什么。请开导我

我们在Tomcat服务器上运行了一些现有的Java代码 希望允许代码在另一台机器上执行,所以我们正在寻找 进入web服务

为此提供Web服务?为什么?

首先,服务器端有一些现有的类 映射到数据库中。我们希望允许客户端使用相同的 现有类……代码重用就这么多了

真是个坏主意。Web服务的目的不是代码的可重用性,而是互操作性。尝试重用实际包含您正在使用的编程语言语义的业务类不仅是一种不好的做法,而且可能会导致许多问题,除非对于您还控制客户机的最简单的web服务

当我对服务器的WSDL文件运行wsimport命令时,它 生成了一组Java类

运行
wsimport
时,将创建web服务客户端与web服务器通信所需的所有必要构件。这包括在SOAP编组/解编组期间帮助转换类的所有存根类

但我有编译错误。我们现有的一些领域 Java类的类型为Java.net.InetAddress

java.net.InetAddress
是一个特定于java的类。你不应该一开始就暴露出来。这就是代码生成器创建空
java.net.InetAddress
的原因

老实说,我不能给你一个直接的答案,使这项工作。我唯一能给你的提示是,如果你用
@xmltransive
注释
InetAddress
字段,它们将不会在
WSDL
中公开,你也不会有这个问题。当然,你不会说你是否需要这个领域,也许我的建议对你没用

但我的建议是改变你的方法。你走错了路,伊姆霍。
唯一的建议是改变你的方法

看看定制JAXB绑定。我不确定这是否有帮助,但听起来您可能需要在生成类时使用一些自定义设置。