@WebService jaxws - 如何在方法上获取命名空间而不是肥皂信封

时间:2017-06-30 16:31:43

标签: java web-services jax-ws

我正在尝试用java 8和jax-ws创建一个@WebService。但是,我似乎无法找到将xmls“http://com.test.mymethod/mymethod”从信封移到方法上的组合。相反,我尝试的每个方法都将它添加到Envbelope,然后在MyWeb方法之前添加ser:前缀。 (如果我创建并发送wsdl会很好,但我必须匹配已在其他地方使用的请求格式)

所需的请求格式:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <MyWebmethod xmlns="http://com.test.mymethod/mymethod">

1 个答案:

答案 0 :(得分:0)

我认为唯一可行的方法(除了询问:“为什么不需要语义相同的反应?” - 但我害怕答案:-))将“后处理”响应

显而易见的解决方案是为Service-Endpoint定义SOAPHandler。这应该是一个直截了当的过程:

  1. 从您的服务中获取示例响应(让我们将其称为“输入XML”以执行以下步骤。)
  2. 创建一个XSL模板,将输入XML转换为所需的输出格式。
  3. 使用@Webservice注释对@HandlerChain进行注释。
  4. 创建处理程序链.xml文件以定义您的SOAP处理程序(在mkyong上有一个定义处理程序的整个过程的基本示例:http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-server-side/
  5. 使用SOAP处理程序中第2步的XSLT转换响应的DOM。
  6. 话虽如此 - 我并非百分之百肯定您将能够充分影响处理程序链的输出。在应用程序服务器序列化DOM之后,生成的文本表示很可能仍然不能令人满意。

    第二个选项是定义ServletFilter并让它重写webservice端点的文本输出。这肯定会让您完全控制输出形式 - 但是重新生成DOM以提供给您XSL模板的(重大)成本。

    总而言之:为什么你会经历所有痛苦?我非常好奇。