Java Apache CXF WS中的请求为空
我使用ApacheCXF编写了一个WS,在Implement类中获取请求数据时,它给出了所有空值Java Apache CXF WS中的请求为空,java,web-services,jaxb,cxf,java-ee-5,Java,Web Services,Jaxb,Cxf,Java Ee 5,我使用ApacheCXF编写了一个WS,在Implement类中获取请求数据时,它给出了所有空值 <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.sa
<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>
并得到空指针异常
这可能是什么原因呢
谢谢,
班纳特
所以用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());
确保您使用的是最新版本的CXF。对于较新版本的CXF,可能会引发异常,并提供有关消息错误的更多详细信息。造成这种情况的正常原因是元素的命名空间错误。例如,如果模式的名称空间不完全正确,JAXB将不知道如何处理它。默认情况下,JAXB只是跳过它,这是CXF过去所做的。最近的版本在JAXB中添加了一个监听器,它将捕获该监听器并由于未知元素引发异常。(它通常会打印出它在那一点上期望的元素名称)请检查请求,我正在发送标题和消息,即使这样,它也是空的。在这个链接中找到代码
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
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());