1

有没有办法手动或按请求处理 SOAP 请求?由于现有系统中一些非常愚蠢的技术原因,我不能只将 JAX-WS 服务发布到通过标准端点工厂创建的端点。我的情况有点混乱,因为我基本上从 ServerSocket 收到了一个原始 InputStream 并被告知要处理它。

流中的数据是从发出 SOAP 请求的客户端发送的。客户端的开发人员提供了一堆 WSDL 和 XSD,用于使用 wsimport 和 xjc 生成必要的服务器端类。所有这些都是 JAX-WS,我想尽可能多地利用 JAX-WS 来最大限度地减少我必须做的工作。

有谁知道从哪里开始寻找如何做到这一点?甚至可能吗?目前我最好的猜测是我必须手动实现客户端点或提供者。

谢谢!

4

1 回答 1

1

您可以使用以下步骤处理原始输入。只需像解析任何 XML 流一样解析传入的消息

     try{ //throws a bunch of XML parsing related exceptions
      XMLInputFactory xFactory = XMLInputFactory.newFactory();
      XMLStreamReader xStream = xFactory.createXMLStreamReader(req.getInputStream());
      //Start skipping tags til you get to the message payload
      for(int nodeCount=0; nodeCount < 3; nodeCount++){
             xStream.nextTag(); //Jump <Envelope/>,<Body/>,<theMessageNode/>   
          }
      //You're now at the level of the actual class; Now unmarshal the payload  

      JAXBContext ctxt  = JAXBContext.newInstance(YourResponseClass.class);
      Unmarshaller um = ctxt.createUnmarshaller();
      JAXBElement<YourResponseClass.class> elem = um.unmarshal(xStream, YourResponseClass.class);             
      YourResponseClass theObj = elem.getValue();

     }
    catch(Exception ex) {

    }
于 2013-02-22T14:28:52.147 回答