首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CXF生成的客户端读取xs:any response?

如何使用CXF生成的客户端读取xs:any response?
EN

Stack Overflow用户
提问于 2011-02-04 22:12:36
回答 1查看 3.1K关注 0票数 3

在使用CXF 2.1.4 (生成的客户端)使用webserice时,根据WSDL中的以下XSD片段获取响应时遇到问题。CXF生成一个表示它的列表,但是当我执行该服务时,响应为null。我使用wireshark来处理我所收到的内容,实际上,响应XMl如期而至,但CXF只给了我空对象。公开的服务是使用.NET实现的。

在响应对象的XSD下面。和

代码语言:javascript
复制
    <!--- chunk -->
     <s:element name="GestionSIIFResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="GestionSIIFResult">
          <s:complexType mixed="true">
            <s:sequence>
              <s:any />
            </s:sequence>
          </s:complexType>
        </s:element>
      </s:sequence>
    </s:complexType>
  </s:element>
  <!--- chunk -->

这是我从服务中得到的响应:

代码语言:javascript
复制
   <soap:Body>
  <GestionSIIFResponse xmlns="http://tempuri.org/">
     <GestionSIIFResult>
        <Siif xmlns="">
           <Pagina>NUY001B</Pagina>
           <Exitos>
              <ExitoRep>
                 <CodExito>SIL0082</CodExito>
                 <DesExito>La transaccion se ha aplicado satisfactoriamente</DesExito>
              </ExitoRep>
           </Exitos>
           <InformacionCab/>
           <Repeticiones/>
        </Siif>
     </GestionSIIFResult>
  </GestionSIIFResponse>

下面是生成的java类,它应该“保存”来自web服务的响应。

代码语言:javascript
复制
/*
*  some imports here
*/

/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="GestionSIIFResult" minOccurs="0">
 *           &lt;complexType>
 *             &lt;complexContent>
 *               &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *                 &lt;sequence>
 *                   &lt;any/>
 *                 &lt;/sequence>
 *               &lt;/restriction>
 *             &lt;/complexContent>
 *           &lt;/complexType>
 *         &lt;/element>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "gestionSIIFResult"
})
@XmlRootElement(name = "GestionSIIFResponse")
public class GestionSIIFResponse {

    @XmlElement(name = "GestionSIIFResult")
    protected GestionSIIFResponse.GestionSIIFResult gestionSIIFResult;

    /**
     * Gets the value of the gestionSIIFResult property.
     * 
     * @return
     *     possible object is
     *     {@link GestionSIIFResponse.GestionSIIFResult }
     *     
     */
    public GestionSIIFResponse.GestionSIIFResult getGestionSIIFResult() {
        return gestionSIIFResult;
    }

    /**
     * Sets the value of the gestionSIIFResult property.
     * 
     * @param value
     *     allowed object is
     *     {@link GestionSIIFResponse.GestionSIIFResult }
     *     
     */
    public void setGestionSIIFResult(GestionSIIFResponse.GestionSIIFResult value) {
        this.gestionSIIFResult = value;
    }


    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;any/>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "content"
    })
    public static class GestionSIIFResult {

        @XmlMixed
        @XmlAnyElement(lax = true)
        protected List<Object> content;

        /**
         * Gets the value of the content property.
         * 
         * <p>
         * This accessor method returns a reference to the live list,
         * not a snapshot. Therefore any modification you make to the
         * returned list will be present inside the JAXB object.
         * This is why there is not a <CODE>set</CODE> method for the content property.
         * 
         * <p>
         * For example, to add a new item, do as follows:
         * <pre>
         *    getContent().add(newItem);
         * </pre>
         * 
         * 
         * <p>
         * Objects of the following type(s) are allowed in the list
         * {@link Object }
         * {@link String }
         * 
         * 
         */
        public List<Object> getContent() {
            if (content == null) {
                content = new ArrayList<Object>();
            }
            return this.content;
        }

    }

}

在生成的代理端口下

代码语言:javascript
复制
/**
 * This class was generated by Apache CXF 2.1.4
 * Mon Jan 17 12:02:39 COT 2011
 * Generated source version: 2.1.4
 * 
 */

@WebService(targetNamespace = "http://tempuri.org/", name = "WSGYG05Soap")
@XmlSeeAlso({ObjectFactory.class})
public interface WSGYG05Soap {

    @ResponseWrapper(localName = "GestionSIIFResponse", targetNamespace = "http://tempuri.org/", className = "suramericana.banw.servicios.tuya.v2.GestionSIIFResponse"/*"org.tempuri.GestionSIIFResponse"*/)
    @RequestWrapper(localName = "GestionSIIF", targetNamespace = "http://tempuri.org/", className = "suramericana.banw.servicios.tuya.v2.GestionSIIF"/*"org.tempuri.GestionSIIF"*/)
    @WebResult(name = "GestionSIIFResult", targetNamespace = "http://tempuri.org/")
    @WebMethod(operationName = "GestionSIIF", action = "http://tempuri.org/GestionSIIF")
    public GestionSIIFResponse.GestionSIIFResult gestionSIIF(
        @WebParam(name = "Peticion", targetNamespace = "http://tempuri.org/")
        GestionSIIF.Peticion peticion,
        @WebParam(header = true,name="CabAut", targetNamespace = "http://tempuri.org/")
        CabAut cabAut
    );
    //@ResponseWrapper(localName = "GestionSIIFResponse", targetNamespace = "http://tempuri.org/", className = "suramericana.banw.servicios.tuya.v2.GestionSIIFResponse"/*"org.tempuri.GestionSIIFResponse"*/)
    //@RequestWrapper(localName = "GestionSIIF", targetNamespace = "http://tempuri.org/", className = "suramericana.banw.servicios.tuya.v2.GestionSIIF"/*"org.tempuri.GestionSIIF"*/)
    //@WebResult(name = "GestionSIIFResult", targetNamespace = "http://tempuri.org/")
    //@WebMethod(operationName = "GestionSIIF", action = "http://tempuri.org/GestionSIIF")
    /*public GestionSIIFResponse.GestionSIIFResult gestionSIIF(
        @WebParam(name = "Peticion", targetNamespace = "http://tempuri.org/")
        GestionSIIF.Peticion peticion,
        @WebParam(header = true,name="CabAut", targetNamespace = "http://tempuri.org/")
        CabAut cabAut
    );*/
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-05 00:02:39

getContent()返回的List可能包含各种org.w3c.dom.ElementJAXBElement或完全绑定的类。

如果JAXB上下文不能识别<Siif>元素,那么JAXB将采取安全措施,并使用表示<Siif>及其子元素的单个Element对象填充列表。如果它能够识别它们,它将直接包含JAXBElementwhich in turn contains aSiifobject, or it may contain theSiif`对象。

Java不能在它的类型中表达这种变化,所以只绑定到List<Object>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4898927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档