以前にWSDLからMetro/JAXBクライアントを生成しましたが、SOAP/XMLとの間のJavaクラスのマーシャリング/アンマーシャリングは問題なく機能しました。新しいクライアントを生成しましたが、マーシャリング解除の問題があるようですが、その理由はわかりません。WSDLは非常に大きく(> 27,000行)、大文字と小文字を除いていくつかの要素名が同じであるため、-B-XautoNameResolutionを使用する必要がありました。
私はこのメソッド/操作を実行しようとしています:
@WebService(name = "servicePortType", targetNamespace = "urn:service")
@XmlSeeAlso({
ObjectFactory.class
})
public interface ServicePortType {
/**
* Service definition of function unsp__GetSubscriberList
*
* @param result
* @param totalSubsFound
* @param getSubListReq
* @param paginatedInfo
* @param getSubscriberListData
*/
@WebMethod(operationName = "GetSubscriberList")
@RequestWrapper(localName = "GetSubscriberList", targetNamespace = "urn:service", className = "service.GetSubscriberList")
@ResponseWrapper(localName = "GetSubscriberListResult", targetNamespace = "urn:service", className = "service.GetSubscriberListResult")
public void getSubscriberList(
@WebParam(name = "GetSubListReq", targetNamespace = "")
GetSubscriberListRequest getSubListReq,
@WebParam(name = "Result", targetNamespace = "", mode = WebParam.Mode.OUT)
Holder<ResultCodeStruct> result,
@WebParam(name = "PaginatedInfo", targetNamespace = "", mode = WebParam.Mode.OUT)
Holder<PaginatedInfo> paginatedInfo,
@WebParam(name = "TotalSubsFound", targetNamespace = "", mode = WebParam.Mode.OUT)
Holder<Integer> totalSubsFound,
@WebParam(name = "GetSubscriberListData", targetNamespace = "", mode = WebParam.Mode.OUT)
Holder<GetSubscriberListData> getSubscriberListData);
}
このメソッドは、サブスクライバーデータとサブスクライバーの総数を返します。私の電話は次のようになります。
public int getTotalSubscriptions()
throws Exception
{
GetSubscriberListRequest subscriberListRequest = factory.createGetSubscriberListRequest();
Holder<ResultCodeStruct> result = null;
Holder<PaginatedInfo> paginatedInfo = null;
Holder<Integer> totalSubsFound = null;
Holder<GetSubscriberListData> subscriberListData = null;
subscriberListRequest.setMaxSubscribers(factory.createGetSubscriberListRequestMaxSubscribers(1));
port.getSubscriberList(subscriberListRequest,
result,
paginatedInfo,
totalSubsFound,
subscriberListData);
if (result.value.getResultCode() != CODE_SUCCESS)
{
throw new Exception("Failed call");
}
return totalSubsFound.value.intValue();
}
結果オブジェクトでNullPointerExceptionが発生します。SOAP呼び出しをトレースしましたが、返されるXMLは、Result要素を含めて期待どおりです。
私はこれまでWebParam.Mode.OUTに遭遇したことがありません。呼び出しを行う前に、Holder <>インスタンスを初期化する必要がありますか?何に?
これらの要素はSOAPのGetSubscriberListResult要素にラップされていますが、インターフェイスメソッドには@ResponseWrapperで定義されている要素があるため、渡されたオブジェクトにマーシャリングされないことを期待していました。何か他のことをする必要があるのでしょうか。
アドバイス/ヘルプは大歓迎です!