現在、Java 1.4 を使用する Weblogic Server 8,1 sp5から Java 1.7 を使用する 10.3.6 に機能を移行中です。
以下に記載されているケースは、旧サーバーでは正常に動作していますが、新サーバーへのハンドリングの移行時に問題が発生しています。問題は、SOAP 呼び出しを介して外部システムから取得された XML 応答を取得して解析するときに発生します。
このメソッドでは、次のライブラリとプロシージャが使用されます。
- 接続を確立するjava.net.HttpURLConnection
- リクエストを送信するjava.io.OutputStream
- 応答を取得するjava.io.InputStream
- 文字列に変換する前に結果を格納するbyte[]
- String をorg.w3c.dom.Documentに変換するjavax.xml.parsers.DocumentBuilder、java.io.StringReaderおよびorg.xml.sax.InputSource
- 次の例外がスロー されます。
notepad++ を使用してアプリケーションのログを開くと、ファイルの末尾に多くの null 文字が表示され、問題の原因と思われます。古いサーバーからのリクエストを実行する場合、そのようなケースは発生しないことを繰り返します。
それぞれのコードは次のとおりです。
//Creating the connection
URL u = new URL(default_server);
URLConnection uc = u.openConnection();
HttpURLConnection connection = (HttpURLConnection) uc;
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod(requestMethod);
connection.setRequestProperty("SOAPAction", soap_action);
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
wout.write(xmlString);
wout.flush();
wout.close();
InputStream in = connection.getInputStream();
int c = in.available();
byte r[] = new byte[c];
in.read(r);
String response = new String(r);
connection.disconnect();
//Transorming the String to XML Doc
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
StringReader theReader = new StringReader(response);
InputSource theInputSource = new InputSource();
theInputSource.setCharacterStream(theReader);
Document doc = builder.parse(theInputSource);
//Here occurs org.xml.sax.SAXParseException-Content is not allowed in trailing section
return doc;
ジャンク文字から応答を取り除くことで問題を解決できることはわかっていますが、これは安全な解決策ではありません。この件について共有する情報はありますか?それは Java のバージョンの問題だと思いますか、それともサーバーの構成の問題でしょうか? よろしくお願いします。
敬具、ジョージ