質問

この問題を気にしていく。思うまでの歩みの中で出会ったこの前に発展し、回避策.

そこで開発したミドルウェアのJavaアプリケーション実行時を呼び出しの石鹸です。現在、この少しのコードは、JDK1.6ではなく、

        // inside a try-catch block
        SOAPConnectionFactory soapConnectionFactory = 
                     SOAPConnectionFactory.newInstance();
        SOAPConnection connection = 
                  soapConnectionFactory.createConnection();
        MessageFactory messageFactory = MessageFactory.newInstance();          
        SOAPMessage soapMsg = messageFactory.createMessage();
        String soapAction = getHeaderUrl() + "/" + method + "\r\n";
        MimeHeaders headers = soapMsg.getMimeHeaders(); 
        headers.addHeader("SOAPAction", soapAction); 

       // review the SOAPAction header
        int header_count = 
           soapMsg.getMimeHeaders().getHeader("SOAPAction").length;
        out("SOAPActions (from Soap header): ");
        if (header_count == 0) out ("No SOAPActions defined.");
        for (int i=0; i<header_count; i++)
            out("SOAPAction["+i+"] = \"" + 
               soapMsg.getMimeHeaders().getHeader("SOAPAction")[i] 
                  + "\""); 


        SOAPPart soapPart = soapMsg.getSOAPPart();            
        StreamSource s = new StreamSource(new StringReader(msg));
        soapPart.setContent(s);
        soapMsg.saveChanges();
        ByteArrayOutputStream req_bytes = new ByteArrayOutputStream();
        soapMsg.writeTo(req_bytes);
        String req = new String(req_bytes.toByteArray());         
        SOAPMessage reply = connection.call(soapMsg, Url);      

しかし、その結果が、先ほど任天堂さんの正確な同じコードを下1.3 1.4JDKの石鹸にリンクされるライブラリ、上記製作所/統/識別 このSOAPAction分野のヘッダ欄は空欄になっ.妙に、私がチェックの価値をヘッダのライン直後の設定は、ヘッダの適切な値が表示されます。しかし、これをワイヤ、フィールドは空になります。この分野に資源をしたいのプロセッサ、メッセージがったのです。

でたことでこの問題。その場合、可能な回避方法?(もちろん、喜んで他の図書館に必要があります。)

更新:

ライブラリに私のクラスパスとして

  • Xerces(resolver.jar,serializer.jar,xercesImpl.jar,xml-apis.jar)
  • 当協会(saaj.jar)
  • 軸axis.jar
  • JAX-RPC(jaxrpc.jar)
  • 標準ディーソープ(activation.jar,mail.jar,soap.jar,xerces.jar)
  • ロギング-コモンズの発見

感謝。

役に立ちましたか?

解決 2

これは実際に監督やバグであってもよい。このように見えますが、いずれにせよ、私の回避策は、手動すなわちを低レベルのHTTPのものを処理するためにだった:ます。

        URL u = new URL(Url);
        URLConnection uc = u.openConnection();
        HttpURLConnection  conn = (HttpURLConnection) uc;

        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("SOAPAction", getHeaderUrl() + "/" + method);
        conn.setRequestProperty("Content-type", "text/xml");

        OutputStream out = conn.getOutputStream();
        Writer wr = new OutputStreamWriter(out);

        wr.write(msg);
        wr.flush();
        wr.close();

        InputStream in = conn.getInputStream();
        String rsp="";
        int c;
        while ((c = in.read()) != -1) { 
            System.out.write(c);
            rsp = rsp.concat(String.valueOf((char)c));
        }
        in.close();
        rsp = deSOAP(rsp);
        response = response.fromXML(rsp);
        return response;

これは同様に有意にSOAPベースのソリューションよりも簡潔であるが判明しました。

他のヒント

独特。あなたはSOAPライブラリにリンクしていると言う? - 正確に、もの

私はそれらの2のどちらかは、Java 1.3をサポートしている場合驚いていただきたいが、

私は、そのようCXFまたはJAX-WS-RIなど、さまざまなSOAPスタックを、しようとして損はない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top