0

JAX WS 正在生成以下内容(仅显示了一个片段):

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:capMessageResponse xmlns:ns2="http://www.########.com" xmlns:ns3="test:one:two:1.2" xmlns:ns4="test:one:two:three:1.1">
         <ns3:alert>
            <ns3:identifier>1247275</ns3:identifier>

这是生成它的方法:

@WebMethod(operationName = "capMessage", action = "urn:getCapMessages")
    @WebResult(name = "alert", targetNamespace="test:one:two:1.2")
    public List<AlertType> getCapMessage(String messageIds,String uniqueId,boolean skipHtmlStrip) throws CommsMessageException {
        try {

我们需要做的是从输出中删除 capMessageResponse 并将 xmlns 属性移动到警报属性。

有没有办法做到这一点?

4

2 回答 2

0

要获得所需的输出,请在服务实现 bean 上指定以下注释

    @SOAPBinding(style = Style.DOCUMENT,parameterStyle=SOAPBinding.ParameterStyle.BARE) 

Document只有当您的 web 服务绑定是样式(这是默认的,并且从外观上看您已经在使用)时,此注释才合法。

不过,请注意这个选择

  1. 您的消息负载不再用操作名称包装,这是您已经知道/想要的

  2. 直接由于 1. 上述,您将无法在同一 Web 服务上的另一个操作中使用相同的实体/参数类型,因为调度程序将没有任何信息可以继续成功调度消息

  3. 同样由于 1(缺少相关信息),您的 Web 服务操作将无法接受多个参数

于 2013-01-11T06:08:11.433 回答
0

从 Java 方法签名看起来您正在使用 DOCUMENT/WRAPPED 样式。你确定吗?如果是这种情况,那么使用当前方法签名将无法完成您希望的操作。

如果您创建一个新类来保存方法参数并切换到 BARE 样式,那么您可以获得您正在寻找的输出。此外,您可能还需要创建另一个类来保存集合返回值。

public List<AlertType> getCapMessage(CapMessageRequest request) throws ...
于 2013-01-11T03:39:30.423 回答