生成的类的客户端请求参数
我已经实现了一个SOAP Web服务,并使用SOAP UI成功地进行了测试。 现在我想用netbeans wsimport通过URL生成客户端类(当然,webservice有glassfish)。 这一代成功运行,但我无法更改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.
怎么会这样? 每个对象都能正常工作,但只有最重要的参数是无法更改的。 这些是我的服务器端类:
这是我的WebService接口:
@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();
}
Web服务的实现:
@WebService(serviceName = "RecommendationService",
portName = "RecommenderPort",
endpointInterface = "org.andy.services.IRecommendationService")
public class RecommendationService implements IRecommendationService {
private Recommender recommender = new Recommender();
@Override
public List<Recommendation> getRecommendation(RecommendationRequest request) {
return recommender.recommend(request);
}
@Override
public String sayCiao() {
return "ciao";
}
}
服务器端的目标对象:
@XmlRootElement(name = "goal")
public class Goal implements Serializable {
private int prio;
private String goal;
public Goal() {
}
public int getPrio() {
return prio;
}
public void setPrio(int prio) {
this.prio = prio;
}
public String getGoal() {
return goal;
}
public void setGoal(String goal) {
this.goal = goal;
}
}
服务器端对象,其中没有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;
}
}
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)
链接地址: http://www.djcxy.com/p/66667.html
上一篇: Client Request parameters of generated classes
下一篇: SOAP UI not finding WSDL depending XSD files in Spring WS Soap Service