2016-08-08 91 views
0

Ich bin derzeit konfrontiert mit einem WSDL-Fehler zwischen Entität und WSDL-Definition. Es scheint eine Liste von komplexen Typen zu ignorieren. Ich verwende Axis 2, um die WSDL aus Entitäten zu generieren, die aus einer XSD-Datei generiert werden. HierAxis Java zu wsdl und complexType Liste

ist der Teil der XSD-Datei:

<xs:element name="Funds"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Fund" maxOccurs="unbounded" minOccurs="0"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element type="xs:string" name="code" /> 
       <xs:element type="xs:string" name="Status" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

Die folgenden Einheiten erzeugt:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "fund" 
}) 
public static class Funds { 

    @XmlElement(name = "Fund") 
    @XmlAnyElement(lax=true) 
    protected List<Request.Funds.Fund> fund; 

    public List<Request.Funds.Fund> getFund() { 
     if (fund == null) { 
      fund = new ArrayList<Request.Funds.Fund>(); 
     } 
     return this.fund; 
    } 


    public void setFund(List<Request.Funds.Fund> fund) { 
     this.fund = fund; 
    } 

    @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "code", 
     "status" 
    }) 
    public static class Fund { 

     @XmlElement(name = "CODE", required = true) 
     protected String code; 
     @XmlElement(name = "Status", required = true) 
     protected String status; 

     public String getCODE() { 
      return code; 
     } 

     public void setCODE(String value) { 
      this.code = value; 
     } 

     public String getStatus() { 
      return status; 
     } 

     public void setStatus(String value) { 
      this.status = value; 
     } 
    } 
} 

Dieser Code generierten gibt die folgende WSDL:

<xs:complexType name="Request_Funds"> 
<xs:sequence> 
<xs:element minOccurs="0" name="fund" nillable="true" type="xs:anyType"/> 
</xs:sequence> 
</xs:complexType> 

Die Liste ist als anyType getippt, so dass wenn es unmarshalled ist, bekomme ich den folgenden Fehler:

java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMElementImpl cannot be cast to com.legalsuite.services.start.importxml.Request$Funds$Fund 

Was kann ich tun, um dieses Verhalten zu vermeiden?

Antwort

0

Da Sie Funds nicht als XmlElement deklariert haben, ist dies kein Teil Ihrer WSDL. Es ist nur ein Container.

Ich glaube, Sie Funds ausdrücklich erklären sollte, so gibt es keine Verwirrung für die WSDL wie folgt ist:

@XmlElement(name = "Funds") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "Fund" 
}) 
public static class Funds { 

    @XmlElement(name = "Fund") 
    @XmlAnyElement(lax=true) 
    protected List<Request.Funds.Fund> fund; 

    public List<Request.Funds.Fund> getFund() { 
     if (fund == null) { 
      fund = new ArrayList<Request.Funds.Fund>(); 
     } 
     return this.fund; 
    } 


    public void setFund(List<Request.Funds.Fund> fund) { 
     this.fund = fund; 
    } 

    @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "", propOrder = { 
     "code", 
     "status" 
    }) 
    public static class Fund { 

     @XmlElement(name = "CODE", required = true) 
     protected String code; 
     @XmlElement(name = "Status", required = true) 
     protected String status; 

     public String getCODE() { 
      return code; 
     } 

     public void setCODE(String value) { 
      this.code = value; 
     } 

     public String getStatus() { 
      return status; 
     } 

     public void setStatus(String value) { 
      this.status = value; 
     } 
    } 
} 
+0

ich versucht, und ich habe folgende Fehlermeldung: „Die Anmerkung @XmlElement für diesen Standort nicht zulässig ist“ –

+0

Did Sie generieren Java-Klassen von XSD? –

+0

Ja, ich habe sie von der XSD über –