2012-11-14 43 views
2

我使用Apache CXF編寫了一個WS,並在實現類中獲取請求數據時,它提供了所有的空值。Apache CXF WS中的請求爲空

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.sample.project.com.au/registration/services/GetCountry/GetCountryRequest/v1" xmlns:v11="http://www.sample.project.com.au/common/message/Request/v1"> 
     <soapenv:Header/> 
     <soapenv:Body> 
      <v1:getCountryRequest> 
      <v11:header> 
       <from>?</from> 
       <to>?</to> 
       <eventTime>?</eventTime> 
       <requestId>?</requestId> 
       <channelCode>?</channelCode> 
       <enduserCode>?</enduserCode> 
       <usecaseName>?</usecaseName> 
      </v11:header> 
      <v1:message> 
       <v1:id>123</v1:id> 
       <v1:name>123</v1:name> 
       <v1:code>213</v1:code> 
      </v1:message> 
      <v1:id>213</v1:id> 
      </v1:getCountryRequest> 
     </soapenv:Body> 
    </soapenv:Envelope> 

au.com.pr[email protected]219baf0b 空 空 顯示java.lang.NullPointerException

我試圖打印的價值

System.out.println(request); 
System.out.println(request.getHeader()); 
System.out.println(request.getHeader().getFrom()); 
System.out.println(request.getMessage()); 
System.out.println(request.getMessage().getId()); 
System.out.println(request.getMessage().getName()); 
System.out.println(request.getMessage().getCode()); 

並得到空指針異常。

這可能是什麼原因造成的。

謝謝, 班尼特。

回答

0
System.out.println(request); // print [email protected], so it's bot null 
System.out.println(request.getHeader()); // is null 
System.out.println(request.getHeader().getFrom()); // NPE becouse header is null 

所以跳過符合NPE,或增加if語句

System.out.println(request); 
System.out.println(request.getHeader()); 
if (request.getHeader() != null) 
{ 
    System.out.println(request.getHeader().getFrom()); 
} 
System.out.println(request.getMessage()); 
System.out.println(request.getMessage().getId()); 
System.out.println(request.getMessage().getName()); 
System.out.println(request.getMessage().getCode()); 
+0

請檢查請求,即時發送Header和Messages,它是空的。找到這個鏈接的代碼http://www.filehosting.org/file/details/393799/sampleWS.rar – Bennet

0

確保您使用的是最新CXF版本。很可能在更新的CXF版本中,將會拋出一個異常,並提供有關該消息的錯誤的更多詳細信息。正常的原因是一個元素的命名空間是錯誤的。例如,如果每個模式的命名空間不是完全正確的,那麼JAXB將不知道如何處理它。默認情況下,JAXB只是跳過它,這是CXF用來做的。最近的版本在JAXB中添加了一個監聽器,它會捕獲它並拋出一個由於未知元素而引發的異常。 (並且通常會打印出當時期望的元素名稱)