代码之家  ›  专栏  ›  技术社区  ›  onigunn

Axis2不返回自己的对象

  •  0
  • onigunn  · 技术社区  · 15 年前

    我已经编写了一些Web服务,其中一些返回一个简单的字符串(这个有效),另一些返回一个对象列表。不,axis2(1.5.1)无法处理集合类型,因此我将返回类型更改为 Object[] 但我还是收到了这个例外

    [ERROR] java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: de.ac.dto
    org.apache.axis2.AxisFault: java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: de.ac.dto
        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
        at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:161)
        at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
        at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:167)
        at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:142)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
    Caused by: org.apache.axiom.om.OMException: java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: de.ac.dto
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:260)
        at org.apache.axiom.om.impl.llom.OMNodeImpl.build(OMNodeImpl.java:335)
        at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:737)
        at org.apache.axiom.om.impl.llom.OMElementImpl.detach(OMElementImpl.java:706)
        at org.apache.axiom.om.impl.llom.OMNodeImpl.setParent(OMNodeImpl.java:124)
        at org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:297)
        at org.apache.axiom.om.impl.llom.OMElementImpl.addChild(OMElementImpl.java:213)
        at org.apache.axiom.soap.impl.llom.SOAPBodyImpl.addChild(SOAPBodyImpl.java:231)
        at org.apache.axis2.rpc.receivers.RPCUtil.processResponseAsDocLitWrapped(RPCUtil.java:381)
        at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:138)
        ... 19 more
    Caused by: java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: de.ac.dto
        at org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:261)
        at org.apache.axis2.databinding.utils.BeanUtil.getPullParser(BeanUtil.java:67)
        at org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl.processProperties(ADBXMLStreamReaderImpl.java:998)
        at org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl.next(ADBXMLStreamReaderImpl.java:835)
        at org.apache.axis2.util.StreamWrapper.next(StreamWrapper.java:71)
        at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:60)
        at org.apache.axiom.om.impl.builder.SafeXMLStreamReader.next(SafeXMLStreamReader.java:183)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:597)
        at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:172)
        ... 28 more
    Caused by: org.apache.axis2.AxisFault: Mapping qname not fond for the package: de.ac.dto
        at org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:117)
        ... 36 more
    

    该服务由Eclipse提供的向导创建。Axis2是否无法返回这些对象?只返回原始类型不符合我的需要。

    2 回复  |  直到 12 年前
        1
  •  2
  •   Matthew Farwell    15 年前

    Axis找不到它需要能够转换通过XML发送的对象的映射。它不知道如何将XML转换为对象,或者反过来。一个好主意是返回一个包含对象数组的对象。

    使用axis,您必须告诉它如何在XML和对象之间进行映射。这是使用WSDL和类本身定义的。

    1)查看Web服务生成的WSDL:您可以通过查看 http://localhost:8080/Service?wsdl . 检查是否正常。

    2)axis通过查看class.gettypedesc()的返回值找到它的映射;检查该映射是否正确。

    对于我的其中一个服务,我有以下映射定义为Web服务的返回值(Class RechercHerbTimentretour,retour的子类)。

    typeDesc.setXmlType(new QName("sbatimentto", "RechercherBatimentRetour")); // 1
    org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
    elemField.setFieldName("batiments");
    elemField.setXmlName(new QName("", "batiments")); // 2
    elemField.setXmlType(new QName("sbatimentto", "ResumeBatimentTo"));
    elemField.setNillable(true);
    typeDesc.addFieldDesc(elemField);
    

    这是定义这个SOAP服务的返回值。

    //1->这表示wsdl complexType rechercHerbTimentretour位于命名空间“sbatimentto”中。

    //2->我们正在将字段“batiments”添加到complexType,该字段通过类中的getter和setter定义为:

    public ResumeBatimentTo[] getBatiments() {
        return batiments;
    }
    
    public void setBatiments(ResumeBatimentTo[] batiments) {
        this.batiments = batiments;
    }
    

    resumeationto也在同一个命名空间中。所以这最终得到一个包含(相当于其他东西)的WSDL

      <complexType name="Retour">
        <sequence>
         <element name="codeRetour" nillable="true" type="xsd:string"/>
         <element name="message" nillable="true" type="xsd:string"/>
         <element name="statut" type="xsd:boolean"/>
        </sequence>
        </complexType>
    
        <complexType name="RechercherBatimentRetour">
        <complexContent>
         <extension base="tns1:Retour">
          <sequence>
           <element name="batiments" nillable="true" type="impl:ArrayOf_tns1_ResumeBatimentTo"/>
          </sequence>
         </extension>
        </complexContent>
      </complexType>
    

    所有使用的类都必须正确定义GetTypeDesc、GetSerializer和GetDeserializer才能使用。

        2
  •  0
  •   jaskirat Singh    12 年前

    实际上,Web服务方法的返回类型应该是非泛型的。

    它不应该是对象,或者只是一个列表…

    所以,返回一个特定的Person类对象..如果Person类的一个对象需要返回 或者如果对象列表存在…..使用…名单…

    改变……享受……!!!!!!!