0

我正在尝试与一些他们已经定义了消息格式和数据结构的遗留应用程序集成。

现在我们使用 Java 6 通过以下代码发布我们的 Web 服务:

Endpoint.publish(urlString, new NotificationListener());

我的 NotificationListener 服务包含 1 个方法,其定义如下:

@WebService
public class NotificationListener {

        @WebMethod(action="notifyStatus111")
         @WebResult(name="NotificationResponse")
      public NotificationResponse notifyStatus1(@WebParam(name="Notification") Notification Notification)
      {
            return new NotificationResponse();
      }

并使用 wsgen 命令通过以下 ant 命令为 Web 服务生成存根:

<project default="wsgen">
 <target name="wsgen" >
  <exec executable="wsgen">
   <arg line="-cp ./bin -keep -s ./src -d ./bin com.xyz.listener.NotificationListener"/>
  </exec>
 </target>
</project>

现在的问题是生成的存根以及 wsdl 在输入和输出对象上创建具有方法名称的包装器。

例如生成的id定义如下:

@XmlRootElement(name = "notifyStatus1")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "notifyStatus1")
public class NotifyStatus1 {

    @XmlElement(name = "notification", namespace = "")
    private com.xyz.listener.notifications.Notification notification;

}

其中通知对象嵌入在 NotifyStatus1 存根中。

然而,遗留应用程序并不期望相同,而是期望 Notification 对象是直接根元素。

他们也可以通过任何方式将通知定义为根,而不是像包装器一样包装在内部并相应地发布我的定义。

非常感谢任何积分帮助。

4

2 回答 2

0

如果您有 Notification 和 NotificationResponse 类已经走另一条路。

当您在 Java 6 中使用 JAX-WS 发布了一个端点时,您可以使用您已经拥有的类http://0.0.0.0:12345/ws来访问自动生成的 WSDL 。http://127.0.0.1:12345/ws?wsdl

然后,您可以使用 Eclipse Web Service Explorer(在 Java EE 版中)生成客户端wsimport或将其指向客户端以进行测试。

于 2013-07-25T16:30:52.653 回答
0

感谢您的快速反馈时间和指示。我已经尝试过您建议的方式,即不通过 wsgen 命令生成存根类并直接发布我的 web 服务。

即使那样输出是相同的,我已经通过生成的 wsdl 进行了验证。以下是生成的 wsdl 的片段:

<portType name="NotificationListener">
     <operation name="notifyStatus1">
            <input message="tns:notifyStatus1"/>
             <output message="tns:notifyStatus1Response"/>
      </operation>
</porttype> 
于 2013-07-25T17:18:03.340 回答