SoapAction行Java1.3
-
20-08-2019 - |
質問
この問題を気にしていく。思うまでの歩みの中で出会ったこの前に発展し、回避策.
そこで開発したミドルウェアの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スタックを、しようとして損はない。
所属していません StackOverflow