2

Apache CXF を使用して WS を作成しました。実装クラスで要求データを取得しているときに、すべて null 値が返されます。

<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

CXF の最新バージョンを使用していることを確認してください。CXF の最近のバージョンでは、メッセージの問題点に関する詳細を含む例外がスローされる可能性があります。これの通常の原因は、要素の名前空間が間違っていることです。たとえば、 の名前空間がスキーマごとに厳密に正しくない場合、JAXB はそれをどう処理すればよいかわかりません。デフォルトでは、JAXB は単にそれをスキップします。これは、CXF が行っていたことです。最近のバージョンでは、JAXB にリスナーが追加されました。これは、リスナーをトラップして、不明な要素が原因で例外をスローします。(そして通常、その時点で予想される要素名を出力します)

于 2012-11-14T18:43:40.220 に答える
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 に答える