【问题标题】:Soap message response body modification helpSoap 消息响应正文修改帮助
【发布时间】:2010-09-01 04:36:33
【问题描述】:

我一直在玩弄使用 jbossws-cxf 的 Web 服务。我认为问题不在于我正在使用的实现,而是代码的生成方式。这是我的带有 Web 服务注释的 pojo。

package com.matt.test.ws;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class JbossWSTestImpl {
    private String[] statuses = {"Hello","JbossWS is cool","GoodBye","l33t hax0rz"};
    @WebMethod
    @WebResult(name="status")
    public String getStatus(){
        return statuses[new java.util.Random().nextInt(3)];
    }

}

当我测试网络服务(使用soapUI)时我的soap响应是

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
  <ns2:getStatusResponse xmlns:ns2="http://ws.test.matt.com/">
     <status>Hello</status>
  </ns2:getStatusResponse>
  </soap:Body>
</soap:Envelope>

有没有办法手动编辑 wsdl 文件来修改“ns2”所在的命名空间,以便我可以将响应包装在不同的标签中。我想要的是类似

<soap:Envelope ...>
   <soap:Body>
      <MyWSResponse xmlns="http://ws.test.matt.com/">
         <status>Hello</status>
      </MyWSResponse>
   <soap:Body>
<soap:Envelope>

是否有我没有使用的注释可以修改它?到目前为止,我还没有找到一种方法来修改 wsdl。

更新:将@WebService 更改为@WebService(targetNamespace="http://MyWSResponse") 将soap 请求更改为正确的标记,但soap 响应消息仍使用ns2 而不是MyWSResponse。

【问题讨论】:

    标签: java web-services wsdl annotations jbossws


    【解决方案1】:

    您必须将新的attribute 添加到WebService 注释中:

    @WebService(targetNamespace="http://ws.test.matt.com/")
    

    如果您未指定任何targetNamespace,则将使用package

    【讨论】:

    • 好的,我明白了,但这如何允许我在肥皂消息中使用 MyWSResponse 标记?因为实际上ws.test.matt.com 实际上并不存在,所以它怎么知道元素名称使用什么?我问的原因是因为我使用了其他网络服务,并且它们在 soap:Body 元素中具有不同的元素名称,我想知道它们是如何实现的?
    • 尝试将 targetNamespace 属性添加到 WebResult 注释并将其设置为空白?像 targetNamespace="" ???
    • 没什么好说的,就是尝试用“从生成的 wsdl 中删除命名空间前缀”来搜索
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多