簡體   English   中英

使用 apache-camel [2.24.3] 使用 SOAP 服務時出錯

[英]Error while consuming SOAP service using apache-camel[2.24.3]

I am getting error while I am trying to consume SOAP service, which is deployed in Jboss EAP 7.1 and My Server with Apache camel[2.24.3] and spring [5.2.2.RELEASE] deployed in Weblogic12c . 交換發生后,它需要以字符串格式提供 getMandatoryBody() 但它在 DOMSource 中返回,駱駝無法將 DOMService 轉換為字符串。

我得到的例外是:

No body available of type: java.lang.String but has value: javax.xml.transform.dom.DOMSource@37279c86 of type: javax.xml.transform.dom.DOMSource on: Message[ID-everest2-1589967071589-0-11]. Caused by: Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.xml.transform.Source] due javax.xml.transform.TransformerException: java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Stream closed. Exchange[ID-everest2-1589967071589-0-10]. Caused by: [org.apache.camel.TypeConversionException - Error during type conversion from type: java.lang.String to the required type: java.lang.String with value [Body is instance of java.xml.transform.Source] due javax.xml.transform.TransformerException: java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Stream closed

只有當我在 weblogic 12c 中部署我的服務器 [with camel and spring] 時才會出現問題。 其他應用服務器 Tomcat 8.5.35 和 jboss-EAP7.2。它工作正常。

我嘗試將 camel-spring-ws 版本降級到 [2.17.3] 它工作正常。

您的異常清楚地表明,從 getMandatoryBody() 方法中,您將獲得 javax.xml.transform.dom.DOMSource 類型的值,而不是 String 值。 因此,您可能需要將 getMandatoryBody() 的值讀取為 DOMSource。 使用 Java 代碼可以輕松地從 DOMSource 轉換為 String:

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

//method to convert Document to String
public String getStringFromDocument(DOMSource domSource)
{
    try
    {
       StringWriter writer = new StringWriter();
       StreamResult result = new StreamResult(writer);
       TransformerFactory tf = TransformerFactory.newInstance();
       Transformer transformer = tf.newTransformer();
       transformer.transform(domSource, result);
       return writer.toString();
    }
    catch(TransformerException ex)
    {
       ex.printStackTrace();
       return null;
    }
}

如果您確定 Exchange 中的字符串值,請在 Exchange object 上執行調試以查看那里存在哪些可能的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM