1

現在、Axis2 上に構築された Web サービス プロジェクトに取り組んでいます。そこで、ログをサーバー コードに追加して特定のオブジェクトの長さを出力すると (Skelton が出力を返す前に)、正しく出力されます。

しかし、受け取ったクライアントに同じコードを追加すると、null ポインターが返されます。(以下の例では、OTA_VehAvailRateRSSequence_type0 は null です)

OTA_VehAvailRateRS oTA_VehAvailRateRS =  stub.CarSearch(oTA_VehAvailRateRQ);
VehicleVendorAvailabilityType[] vehicleVendorAvailabilityTypes = oTA_VehAvailRateRS.getOTA_VehAvailRateRSChoice_type0().getOTA_VehAvailRateRSSequence_type0() .getVehAvailRSCore().getVehVendorAvails().getVehVendorAvail();
logger.info("buildResponse().vehicleVendorAvailabilityTypes.length : " + vehicleVendorAvailabilityTypes.length);

この理由は何でしょうか?オブジェクトが Skelton から返された後、オブジェクトが失われる可能性はありますか?

4

1 に答える 1

1

ここでは、シーケンス型が選択型の側にネストされていることがわかります。これは、これをトリガーする可能性があります。OTA xsd 型は非常に複雑で、Axis2 で作業するときにこの種の問題を呪う可能性がありますが、Axis2 に関連しているとは思いませんが、これは可能性があります非標準の xsd 型定義に問題がある場合は、xsd からエーテルのネストされたシーケンス型または選択型を削除してみてください。また、Axis2 コード生成を行うときに、クライアント側とサーバー側の両方で同じ xsd/wsdl を使用することを忘れないでください。

于 2013-10-23T07:19:39.500 に答える