首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java WebService 調用報錯:Cannot create a secure XMLInputFactory 解決

     編輯:程式設計綜合問答

錯誤現場

使用 HttpURLConnection 調用 WebService,添加 conn.getOutputStream() 後報 500 錯誤,服務端拋出:

java.lang.RuntimeException: Cannot create a secure XMLInputFactory

根因分析

  • 調用 getOutputStream() 會觸發 POST 請求,服務端期望接收 SOAP XML 流;
  • 若請求體為空或格式錯誤,服務端解析 XML 時初始化 XMLInputFactory 失敗;
  • 常見原因:未設置 Content-Type、未寫入有效 SOAP 請求體、JAXP 工廠類衝突(如類路徑中存在多個 stax-api 實現)。

解決方案

  1. 設置正確請求頭:
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setRequestProperty("SOAPAction", "yourAction");
  1. 寫入完整 SOAP Envelope:
String soapRequest = "<?xml version=\"1.0\"?><soap:Envelope ...>...</soap:Envelope>";
try (OutputStream os = conn.getOutputStream()) {
    os.write(soapRequest.getBytes("UTF-8"));
}
  1. 排查類路徑衝突:確保 woodstox、stax2-api 等只有一個版本,或設置系統屬性 -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory。

參考鏈接

詳細排查過程

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved