0

我正在使用 JBoss 5.1.0GA 为其开发 WebService 和 Client。JBossWs 堆栈已经预装了我下载的二进制文件,据我所知,它是 JBossWs 3.1.2GA

我已经使用此设置开发了一个 Web 服务,并且还成功创建了一个客户端。这就是我所拥有的。

部署为 war 文件的 pojo Web 服务。

@WebService
public class Service{
    @WebMethod
    public CompleObj getConfiguration() {
        CompleObj oConf = new CompleObj ();
        for (int i = 0; i < 10; i++) {
            NestObj oInst = new BOpRepoInstance("Val1", "Val2", "Val3", "Val4");
            oConf.addRepoInstance(oInst);
        }
        return oConf;
    }
}

这里,

CompleObj => 是一个具有 NestObj 类型列表的复杂对象。它的 getter/setter、toString 和其他一些方法。

NextObj => 有 4 个 String 类型的变量。它的getter/setter、toString、hashCode、equals等方法。

已成功部署此 Web 服务。

后来使用 eclipse 向导创建了一个客户端,用于使用 WSDL 文档生成 Web Service Client。它还创建了一个示例客户端文件,该文件将调用 Web 服务并获取返回值。这也很有效。

现在我的问题是,当 Eclipse 为客户端生成存根时,它为 CompleObj 和 NestObj 创建了类。这些类只有变量及其 getter/setter(这是有道理的,因为它们是从 WSDL 文档生成的)。因此,我放弃了许多其他方法,包括 toString、hasCode、equals 等,我也想在客户端使用这些方法。

现在如何直接使用WebService项目中定义的实际类文件,避免客户端使用生成的类文件。我可以为客户端项目提供类文件作为 .jar 二进制文件,我真的不知道如何实现这一点。

另一个问题是,Web 服务位置直接嵌入到存根中,我该怎么做才能将 Web 服务位置作为参数的一部分传递给调用代码?

4

1 回答 1

0
  1. 在客户端生成的类只是占位符,它不是您自己的类的反序列化版本,当您调用用于将对象传送到服务器的服务时,JBOOSWS 将 JAXB 映射到实际类。所以你不能让你自己的类在客户端使用,尽管它们看起来一样。

  2. URL 将在存根代码中固定,因为在 Eclipse 中生成 WS 客户端时您必须提供的第一件事是 WSDL URL,然后 Eclipse 将相应地生成客户端代码,因此生成的代码特定于您提供的 WSDL。如果您想动态传递 WSDL,那么您需要拥有自己的代码,以使用任何 WSDLtoJAVA 或任何其他实用程序通过传递的 WSDL URL 生成客户端存根。

于 2012-07-04T09:26:42.657 回答