gpt4 book ai didi

java - Axis2 不返回自己的对象

转载 作者:行者123 更新时间:2023-12-02 08:32:09 26 4
gpt4 key购买 nike

我编写了一些网络服务,其中一些返回一个简单的字符串(这个可以工作),另一些返回一个对象列表。不,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无法返回这些对象吗?仅返回原始类型不符合我的需要。

最佳答案

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

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

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

2) Axis通过查看Class.getTypeDesc()的返回值来找到它的映射;检查此映射是否正确。

对于我的一项服务,我将以下映射定义为 Web 服务的返回值(RechercherBatimentRetour 类,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 RechercherBatimentRetour 位于命名空间“sbatimentto”中。

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

public ResumeBatimentTo[] getBatiments() {
return batiments;
}

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

ResumeBatimentTo 也位于同一命名空间中。所以这最终得到一个 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 才能使用。

关于java - Axis2 不返回自己的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3069659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com