Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析webservice响应(Metro/JAXB)时出现问题_Java_Jaxb_Java Metro Framework_Unmarshalling - Fatal编程技术网

Java 解析webservice响应(Metro/JAXB)时出现问题

Java 解析webservice响应(Metro/JAXB)时出现问题,java,jaxb,java-metro-framework,unmarshalling,Java,Jaxb,Java Metro Framework,Unmarshalling,我以前从WSDL生成过Metro/JAXB客户机,Java类与SOAP/XML之间的编组/解编工作没有任何问题。我已经生成了一个新的客户端,似乎存在解组问题,我不知道为什么。WSDL非常大(>27000行),我不得不使用-B-XautoNameResolution,因为除了case之外,有些元素名是相同的 我正在尝试执行此方法/操作: @WebService(name = "servicePortType", targetNamespace = "urn:service") @XmlSeeAls

我以前从WSDL生成过Metro/JAXB客户机,Java类与SOAP/XML之间的编组/解编工作没有任何问题。我已经生成了一个新的客户端,似乎存在解组问题,我不知道为什么。WSDL非常大(>27000行),我不得不使用-B-XautoNameResolution,因为除了case之外,有些元素名是相同的

我正在尝试执行此方法/操作:

@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);

}
@WebService(name=“servicePortType”,targetNamespace=“urn:service”)
@XmlSeeAllow({
ObjectFactory.class
})
公共接口ServicePortType{
/**
*函数unsp_uugetSubscriberList的服务定义
* 
*@param结果
*@param-totalsubfound
*@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”)
公共无效订阅列表(
@WebParam(name=“GetSubListReq”,targetNamespace=”“)
GetSubscriberListRequest getSubListReq,
@WebParam(name=“Result”,targetNamespace=“”,mode=WebParam.mode.OUT)
持有者结果,
@WebParam(name=“PaginatedInfo”,targetNamespace=”“,mode=WebParam.mode.OUT)
保持架分页信息,
@WebParam(name=“TotalSubsFound”,targetNamespace=”“,mode=WebParam.mode.OUT)
找到了持有者,
@WebParam(name=“GetSubscriberListData”,targetNamespace=“”,mode=WebParam.mode.OUT)
持有人(数据);
}
此方法将返回订户数据以及订户总数。我的电话是这样的:

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();
}
public int getTotalSubscriptions()
        throws Exception
{
        GetSubscriberListRequest subscriberListRequest = factory.createGetSubscriberListRequest();
        Holder<ResultCodeStruct> result = new Holder<ResultCodeStruct>(factory.createResultCodeStruct());
        Holder<PaginatedInfo> paginatedInfo = new Holder<PaginatedInfo>(factory.createPaginatedInfo());
        Holder<Integer> totalSubsFound = new Holder<Integer>(new Integer(0));
        Holder<GetSubscriberListData> subscriberListData = new Holder<GetSubscriberListData>(factory.createGetSubscriberListData());

    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();
}
public int getTotalSubscriptions()
抛出异常
{
GetSubscriberListRequest subscriberListRequest=factory.createGetSubscriberListRequest();
Holder result=null;
持有者paginatedInfo=null;
Holder TotalSubFound=null;
持有人subscriberListData=null;
setMaxSubscriberListRequests(工厂.createGetSubscriberListRequestMaxSubscribers(1));
port.getSubscriberList(subscriberListRequest,
结果,,
paginatedInfo,
我们发现,
订阅数据);
if(result.value.getResultCode()!=CODE\u成功)
{
抛出新异常(“失败的调用”);
}
返回totalSubsFound.value.intValue();
}
我在结果对象上得到一个NullPointerException。我已经跟踪了SOAP调用,返回的XML与预期的一样,包括一个Result元素

我以前从未遇到过WebParam.Mode.OUT。在我进行调用之前是否应该初始化Holder实例?为了什么

这些元素被包装在SOAP中的GetSubscriberListResult元素中,但是由于接口方法具有@ResponseWrapper中定义的接口方法,所以我希望它们被解组到传入的对象中。也许我需要做点别的


非常感谢您的任何建议/帮助

花了相当多的时间在互联网上搜索,发现了一个旧的引用,指出Holder对象确实需要初始化。因此,正确的方法调用如下所示:

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();
}
public int getTotalSubscriptions()
        throws Exception
{
        GetSubscriberListRequest subscriberListRequest = factory.createGetSubscriberListRequest();
        Holder<ResultCodeStruct> result = new Holder<ResultCodeStruct>(factory.createResultCodeStruct());
        Holder<PaginatedInfo> paginatedInfo = new Holder<PaginatedInfo>(factory.createPaginatedInfo());
        Holder<Integer> totalSubsFound = new Holder<Integer>(new Integer(0));
        Holder<GetSubscriberListData> subscriberListData = new Holder<GetSubscriberListData>(factory.createGetSubscriberListData());

    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();
}
public int getTotalSubscriptions()
抛出异常
{
GetSubscriberListRequest subscriberListRequest=factory.createGetSubscriberListRequest();
Holder result=新的Holder(factory.createResultConstruct());
Holder paginatedInfo=新的支架(factory.createPaginatedInfo());
Holder TotalSubFound=新的Holder(新的整数(0));
Holder subscriberListData=新的Holder(factory.createGetSubscriberListData());
setMaxSubscriberListRequests(工厂.createGetSubscriberListRequestMaxSubscribers(1));
port.getSubscriberList(subscriberListRequest,
结果,,
paginatedInfo,
我们发现,
订阅数据);
if(result.value.getResultCode()!=CODE\u成功)
{
抛出新异常(“失败的调用”);
}
返回totalSubsFound.value.intValue();
}
希望这能帮助其他可能遇到同样问题的人