Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 Can';t更改生成的类的SOAP客户端请求参数_Java_Web Services_Soap_Soap Client - Fatal编程技术网

Java Can';t更改生成的类的SOAP客户端请求参数

Java Can';t更改生成的类的SOAP客户端请求参数,java,web-services,soap,soap-client,Java,Web Services,Soap,Soap Client,我已经实现了一个SOAP Web服务,并用SOAP UI成功地测试了它。现在,我想使用netbeans wsimport by URL生成客户机类(当然,glassfish with webservice处于启用状态)。生成成功运行,但我无法更改RecommendationRequest-complextype的参数。这是我的客户代码: RecommendationService service = new RecommendationService(); ShitstormRec recomm

我已经实现了一个SOAP Web服务,并用SOAP UI成功地测试了它。现在,我想使用netbeans wsimport by URL生成客户机类(当然,glassfish with webservice处于启用状态)。生成成功运行,但我无法更改RecommendationRequest-complextype的参数。这是我的客户代码:

RecommendationService service = new RecommendationService();
ShitstormRec recommenderPort = service.getRecommenderPort();

ObjectFactory factory = new ObjectFactory();
Goal g1 = factory.createGoal(); // runs
        g1.setGoal("cost"); // runs perfectly, can set the value
        g1.setPrio(1); // runs perfectly, can set the value

RecommendationRequest request = factory.createRecommendationRequest();
        request.setVariables // no setter was generated, can't use any setters!!!
recommenderPort.getRecommendation(request); // so i can't send a meaningful request with adjusted parameters, because of missing generated setter-Methods from request.
这怎么可能?每个对象都可以正常工作,但只有最重要的参数无法更改。以下是我的服务器端类:

这是我的Web服务界面:

@WebService(name = "ShitstormRec",
        targetNamespace = "http://shitstormrec.org")
public interface IRecommendationService {

    @WebMethod
    @WebResult(name = "recommendations")
    public List<Recommendation> getRecommendation(
            @WebParam(name = "recommendationRequest") RecommendationRequest request);

    @WebMethod
    @WebResult(name = "say")
    public String sayCiao();
}
服务器端对象,其中没有可用于生成的客户端类的setter:

@XmlRootElement(name = "recommendationRequest")
public class RecommendationRequest implements Serializable {

    private List<ProcessVariable> variables;
    private List<Goal> goals;

    public RecommendationRequest() {
    }

    public RecommendationRequest(List<ProcessVariable> variables, List<Goal> goals) {
        this.variables = variables;
        this.goals = goals;
    }

    public List<ProcessVariable> getVariables() {
        return variables;
    }

    public void setVariables(List<ProcessVariable> variables) {
        this.variables = variables;
    }

    public List<Goal> getGoals() {
        return goals;
    }

    public void setGoals(List<Goal> goals) {
        this.goals = goals;
    }

}
@XmlRootElement(name=“recommendationRequest”)
公共类RecommendationRequest实现可序列化{
私有列表变量;
私人清单目标;
公开推荐请求(){
}
公共推荐请求(列出变量,列出目标){
变量=变量;
这个。目标=目标;
}
公共列表getVariables(){
返回变量;
}
公共void setVariables(列表变量){
变量=变量;
}
公共列表getGoals(){
回归目标;
}
公共目标(列出目标){
这个。目标=目标;
}
}
wsdl:

<definitions targetNamespace="http://services.andy.org/" name="RecommendationService">
    <import namespace="http://shitstormrec.org" location="http://localhost:9090/ShitstormRec/RecommendationService?wsdl=1"/>
    <binding name="RecommenderPortBinding" type="ns1:ShitstormRec">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="getRecommendation">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="sayCiao">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="RecommendationService">
        <port name="RecommenderPort" binding="tns:RecommenderPortBinding">
            <soap:address location="http://localhost:9090/ShitstormRec/RecommendationService"/>
        </port>
    </service>
</definitions>

上面引用的wsdl:

<!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is Metro/2.3.2-b608 (trunk-7979; 2015-01-21T12:50:19+0000) JAXWS-RI/2.2.11-b150120.1832 JAXWS-API/2.2.12 JAXB-RI/2.2.12-b141219.1637 JAXB-API/2.2.13-b141020.1521 svn-revision#unknown. 
--><!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is Metro/2.3.2-b608 (trunk-7979; 2015-01-21T12:50:19+0000) JAXWS-RI/2.2.11-b150120.1832 JAXWS-API/2.2.12 JAXB-RI/2.2.12-b141219.1637 JAXB-API/2.2.13-b141020.1521 svn-revision#unknown. 
--><definitions targetNamespace="http://shitstormrec.org">
    <types>
        <xsd:schema>
            <xsd:import namespace="http://shitstormrec.org" schemaLocation="http://localhost:9090/ShitstormRec/RecommendationService?xsd=1"/>
        </xsd:schema>
    </types>
    <message name="getRecommendation">
        <part name="parameters" element="tns:getRecommendation"/>
    </message>
    <message name="getRecommendationResponse">
        <part name="parameters" element="tns:getRecommendationResponse"/>
    </message>
    <message name="sayCiao">
        <part name="parameters" element="tns:sayCiao"/>
    </message>
    <message name="sayCiaoResponse">
        <part name="parameters" element="tns:sayCiaoResponse"/>
    </message>
    <portType name="ShitstormRec">
        <operation name="getRecommendation">
            <input ns1:Action="http://shitstormrec.org/ShitstormRec/getRecommendationRequest" message="tns:getRecommendation"/>
            <output ns2:Action="http://shitstormrec.org/ShitstormRec/getRecommendationResponse" message="tns:getRecommendationResponse"/>
        </operation>
        <operation name="sayCiao">
            <input ns3:Action="http://shitstormrec.org/ShitstormRec/sayCiaoRequest" message="tns:sayCiao"/>
            <output ns4:Action="http://shitstormrec.org/ShitstormRec/sayCiaoResponse" message="tns:sayCiaoResponse"/>
        </operation>
    </portType>
</definitions>

XSD模式:

<!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is Metro/2.3.2-b608 (trunk-7979; 2015-01-21T12:50:19+0000) JAXWS-RI/2.2.11-b150120.1832 JAXWS-API/2.2.12 JAXB-RI/2.2.12-b141219.1637 JAXB-API/2.2.13-b141020.1521 svn-revision#unknown. 
--><xs:schema version="1.0" targetNamespace="http://shitstormrec.org">
    <xs:element name="getRecommendation" type="tns:getRecommendation"/>
    <xs:element name="getRecommendationResponse" type="tns:getRecommendationResponse"/>
    <xs:element name="goal" type="tns:goal"/>
    <xs:element name="processVariable" type="tns:processVariable"/>
    <xs:element name="recommendation" type="tns:recommendation"/>
    <xs:element name="recommendationRequest" type="tns:recommendationRequest"/>
    <xs:element name="sayCiao" type="tns:sayCiao"/>
    <xs:element name="sayCiaoResponse" type="tns:sayCiaoResponse"/>
    <xs:complexType name="sayCiao">
        <xs:sequence/>
    </xs:complexType>
    <xs:complexType name="sayCiaoResponse">
        <xs:sequence>
            <xs:element name="say" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="getRecommendation">
        <xs:sequence>
            <xs:element name="recommendationRequest" type="tns:recommendationRequest" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="recommendationRequest">
        <xs:sequence>
            <xs:element name="goals" type="tns:goal" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="variables" type="tns:processVariable" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="goal">
        <xs:sequence>
            <xs:element name="goal" type="xs:string" minOccurs="0"/>
            <xs:element name="prio" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="processVariable">
        <xs:sequence>
            <xs:element name="name" type="xs:string" minOccurs="0"/>
            <xs:element name="type" type="tns:variableType" minOccurs="0"/>
            <xs:element name="value" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="getRecommendationResponse">
        <xs:sequence>
            <xs:element name="recommendations" type="tns:recommendation" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="recommendation">
        <xs:sequence>
            <xs:element name="benefit" type="xs:int"/>
            <xs:element name="information" type="xs:string" minOccurs="0"/>
            <xs:element name="taskName" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="variableType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="STRING"/>
            <xs:enumeration value="INTEGER"/>
            <xs:enumeration value="DOUBLE"/>
            <xs:enumeration value="OBJECT"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

我做错了吗


非常感谢您的帮助=)

我找到了解决方案。一切都是正确的,只是推理上的错误。我只需要得到变量列表并添加一些东西。我对丢失的二传手感到困惑

RecommendationRequest request = factory.createRecommendationRequest();
        request.setVariables // setter was not available 

// Instead i used:
request.getVariables().add(object_to_add)
<!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is Metro/2.3.2-b608 (trunk-7979; 2015-01-21T12:50:19+0000) JAXWS-RI/2.2.11-b150120.1832 JAXWS-API/2.2.12 JAXB-RI/2.2.12-b141219.1637 JAXB-API/2.2.13-b141020.1521 svn-revision#unknown. 
--><xs:schema version="1.0" targetNamespace="http://shitstormrec.org">
    <xs:element name="getRecommendation" type="tns:getRecommendation"/>
    <xs:element name="getRecommendationResponse" type="tns:getRecommendationResponse"/>
    <xs:element name="goal" type="tns:goal"/>
    <xs:element name="processVariable" type="tns:processVariable"/>
    <xs:element name="recommendation" type="tns:recommendation"/>
    <xs:element name="recommendationRequest" type="tns:recommendationRequest"/>
    <xs:element name="sayCiao" type="tns:sayCiao"/>
    <xs:element name="sayCiaoResponse" type="tns:sayCiaoResponse"/>
    <xs:complexType name="sayCiao">
        <xs:sequence/>
    </xs:complexType>
    <xs:complexType name="sayCiaoResponse">
        <xs:sequence>
            <xs:element name="say" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="getRecommendation">
        <xs:sequence>
            <xs:element name="recommendationRequest" type="tns:recommendationRequest" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="recommendationRequest">
        <xs:sequence>
            <xs:element name="goals" type="tns:goal" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="variables" type="tns:processVariable" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="goal">
        <xs:sequence>
            <xs:element name="goal" type="xs:string" minOccurs="0"/>
            <xs:element name="prio" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="processVariable">
        <xs:sequence>
            <xs:element name="name" type="xs:string" minOccurs="0"/>
            <xs:element name="type" type="tns:variableType" minOccurs="0"/>
            <xs:element name="value" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="getRecommendationResponse">
        <xs:sequence>
            <xs:element name="recommendations" type="tns:recommendation" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="recommendation">
        <xs:sequence>
            <xs:element name="benefit" type="xs:int"/>
            <xs:element name="information" type="xs:string" minOccurs="0"/>
            <xs:element name="taskName" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="variableType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="STRING"/>
            <xs:enumeration value="INTEGER"/>
            <xs:enumeration value="DOUBLE"/>
            <xs:enumeration value="OBJECT"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
RecommendationRequest request = factory.createRecommendationRequest();
        request.setVariables // setter was not available 

// Instead i used:
request.getVariables().add(object_to_add)