2016-03-29 32 views
0

Bir SOAP Web hizmeti uyguladım ve bunu SOAP UI ile başarıyla test ettim. Şimdi netbeans wsimport ile istemci sınıflarını URL'ye göre oluşturmak istiyorum (webservice'li glassfish, elbette). Nesne başarıyla çalışır, ancak TavsiyesiRequest -complextype parametrelerini değiştiremiyorum. Bu benim müşteri kodum:Oluşturulan sınıfların SOAP-İstemci İsteği parametrelerini değiştiremezsiniz

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. 

Bu nasıl olabilir? Her Nesne iyi çalışır, ancak sadece en önemli argüman değişemez.

@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"; 
    } 

} 

serverside Hedef nesne:

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

} 
web hizmetinin

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

Uygulama: Bu benim WebService-Arayüz ise

: Bunlar benim sunucu-sınıflardır

Oluşturulan istemci sınıfları için ayarlanamayan sunucu tarafı nesnesi:

@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:

<!-- 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 şeması:

<!-- 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> 

i bir hata yaptın mı yukarıdan

<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> 

başvurulan wsdl?

Yardımlarınız için teşekkürler çok =)

cevap

0

Ben çözüm bulduk. Her şey doğrudur, sadece akıl yürütmede bir hataydı. Sadece Değişkenler Listesini almam ve bir şeyler eklemem gerek. Eksik belirleyiciler hakkında kafam karıştı.

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

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