2010-06-08 137 views
3

我在向java webservice發出請求時收到上述消息。Webservice返回java.lang.reflect.InvocationTargetException

我們最初創建了一個Java控制檯應用程序並手動提交了一個xml文件。將其作爲Java應用程序運行時,通過使用System.out.println成功創建並顯示響應。我們通過選擇包含方法的java文件並選擇「create webservice」來指定要創建Web服務的動態項目以及要公開的方法來創建Web服務。

哪些應用程序正在做的是一個XML文件,並使用解組此爲一個對象:

public static Object unmarshalToObject(Class classToBeBound, 
    String xmlRequest) { 
    Object obj = new Object(); 
    try { 
    JAXBContext jc = JAXBContext.newInstance(classToBeBound); 
    Unmarshaller um = jc.createUnmarshaller(); 
    obj = um.unmarshal(new StringReader(xmlRequest)); 
    } catch (Exception e) { 
    e.printStackTrace() 
    } 
    return obj; 
} 

一些處理上的文件進行,然後將對象編組到XML如下:

public static String marshalToXML(Object data) { 
    StringWriter sw = new StringWriter(); 
    try { 
    logger.info("Create new Marshall"); 
    JAXBContext jc = JAXBContext.newInstance("ContextPathName"); 
    logger.info("Marshalled to xmlObjects"); 
    Marshaller marshaller = jc.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 
    marshaller.marshal(data, sw); 
    } catch (Exception e) { 
    logException(logger, e); 
    } 
    return sw.toString(); 
} 

的在此之前的下面是代碼似乎記錄器顯示消息是造成問題的行:

JAXBContext jc = JAXBContext.newInstance("ContextPathName"); 

的Web服務不會繼續執行下一行 - 以下是SOAP消息的正文:

<soapenv:Fault> 
    <faultcode>soapenv:Server.userException</faultcode> 
    <faultstring>java.lang.reflect.InvocationTargetException</faultstring> 
    <detail> 
     <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">servername</ns1:hostname> 
    </detail> 
    </soapenv:Fault> 

我已經添加的try/catch圍繞這部分代碼甚至遠找JAXBExceptions但這樣做似乎沒有捕捉到任何東西 - 一般的例外也沒有。

運行控制檯應用程序時不會發生此問題。造成這種情況的構建路徑包括太陽\ JWSDP-2.0以下內容\ JAXB \ lib目錄下:

jaxb-api.jar 
jsr173_1.0_api.jar 
jaxb-impl.jar 

我已經添加了這些在動態項目的WEB-INF文件lib文件夾。

我正在JBuilder 2008 R2中運行webservice並使用SOAPUI提交請求 - 這指向創建webservice時生成的wsdl。

如果任何人有任何幫助或想法如何解決這個問題,他們可以請回復 - 感謝您花時間閱讀這篇文章!

+1

SOAP錯誤指示服務器上的錯誤,一個沒有正確處理和報告。這可能是由您的請求中的錯誤導致的,但是如果沒有正確的錯誤報告,就不能說明它是什麼。 – skaffman 2010-06-08 19:30:31

+0

你有沒有解決你的問題? – 2011-06-22 15:10:28

回答

5

我和你很像,通過SOAP接收一些XML並將其編碼到對象中。這不一定與問題有關。

如果在處理請求時運行Axis中的某些Java代碼時出現問題,則會引發InvocationException。您需要指定一些額外的選項才能訪問來自Axis本身的日誌輸出。一旦你有這個輸出,你很可能會看到一個對你有意義的異常(在我的例子中,我正在使用一個我沒有包含在我的服務器類路徑中的類)。

基本上你需要添加一個LogHandler到你的WSDD文件。以下頁面對WSDD中您需要的內容有很好的指導。但是這個頁面介紹了Axis客戶端的client-config.wsdd,而我在我的EAR中捆綁了Axis並對server-config.wsdd進行了更改。

http://www.theserverside.com/discussions/thread.tss?thread_id=35765

This page具有信息更具體到Tomcat

注意axis.log的保存位置可以根據你的服務器和操作系統的不同而不同。有些人報告它出現在Windows的System32目錄中,第二個鏈接表示它將出現在Tomcat的bin /目錄中。在我的情況下(Mac OS X,Glassfish 2.1.1),它出現在我的域的config /目錄中。

0

我最近遇到過這個問題。當我們無法在我們指向的服務器上找到相關的Java代碼時,就會發生這種情況。

這裏有幾個可能性,你可以看看:

•右JAR文件服務器

•在WSDL和服務器上的後續Jar文件上不存在已經被更新,使用的WSDL不是最新的

•在JAR文件夾中有多個相同的 類型的jar文件。在大多數情況下,用戶在放置新更新的JAR文件之前重命名其舊JAR 文件。這不應該是 作爲正確的方法沒有拿起。因此,請從服務器中刪除所有不需要的JAR文件。見下面