2

我使用 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.project.sample.registration.services.getcountry.GetCountryRequest@219baf0b null null 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());

并得到空指针异常。

这可能是什么原因。

谢谢,班纳特。

4

2 回答 2

0
System.out.println(request);  // print GetCountryRequest@219baf0b, 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());
于 2012-11-14T07:56:59.007 回答
0

确保您使用的是最新版本的 CXF。对于更新版本的 CXF,可能会引发异常,其中包含有关消息错误的更多详细信息。造成这种情况的正常原因是元素的命名空间错误。例如,如果每个模式的命名空间不完全正确,JAXB 将不知道如何处理它。默认情况下,JAXB 只是跳过它,这是 CXF 过去所做的。最近的版本在 JAXB 中添加了一个侦听器,该侦听器将捕获它并由于未知元素而引发异常。(并且它通常会打印出当时期望的元素名称)

于 2012-11-14T18:43:40.220 回答