1

SOAPリクエストを手動またはリクエストごとに処理する方法はありますか?既存のシステムには非常にばかげた技術的な理由があるため、標準のエンドポイントファクトリを介して作成されたエンドポイントにJAX-WSサービスを公開することはできません。私の状況は、基本的にServerSocketから生のInputStreamを渡され、それを処理するように指示されているという点で少し混乱しています。

ストリーム内のデータは、SOAP要求を行うクライアントから送信されています。クライアントの開発者は、wsimportとxjcを使用して必要なサーバー側クラスを生成するための一連のWSDLとXSDを提供します。それはすべて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 に答える