[英]How to return custom objects in Apache Axis2 WebService
我一直在嘗試使用Eclipse Juno,Maven和java2wsdl插件部署Apache Axis2 WebService。 然而,我一直遇到一個問題,我認為這是由於映射,希望有人可以指出我正確的方向。
我正在嘗試在我的WebService上調用一個接受參數並返回自定義對象的操作,但到目前為止沒有運氣。
我的守則
為了說話,我有以下課程:
package com.example.models;
public class MyClass {
// Does something
}
我在以下操作中返回MyClass列表:
package com.example.service;
import com.example.models;
public class MyService {
public List<MyClass> getExampleData(// a parameter) {
// Do something
return aListOfMyClass;
}
}
我的services.xml文件:
<serviceGroup>
<service name="MyWebService" targetNamespace="http://com.example.service.MyWebService/">
<description>JNLPGenerator service</description>
<schema schemaNamespace="http://com.example.service.MyWebService/" />
<parameter name="ServiceClass" locked="false">com.example.service.MyWebService</parameter>
<operation name="getExampleData">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
</serviceGroup>
錯誤:
當我部署WebService時,我收到以下錯誤消息,這是由於未映射類MyClass。
<Exception>org.apache.axis2.AxisFault: org.apache.axis2.AxisFault: Mapping qname not fond for the package: com.example.models
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.util.RESTUtil.invokeAxisEngine(RESTUtil.java:135)
at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)
at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:817)
at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.RuntimeException: org.apache.axis2.AxisFault: Mapping qname not fond for the package: com.example.models
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:994)
at org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl.next(ADBXMLStreamReaderImpl.java:831)
at org.apache.axis2.util.StreamWrapper.next(StreamWrapper.java:71)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:672)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
at org.apache.axiom.om.impl.llom.OMSerializableImpl.build(OMSerializableImpl.java:78)
at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:745)
at org.apache.axiom.om.impl.llom.OMElementImpl.detach(OMElementImpl.java:723)
at org.apache.axiom.om.impl.llom.OMNodeImpl.setParent(OMNodeImpl.java:105)
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:422)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:138)
... 25 more
Caused by: org.apache.axis2.AxisFault: Mapping qname not fond for the package: com.example.models
at org.apache.axis2.databinding.utils.BeanUtil.getPropertyQnameList(BeanUtil.java:117)
... 40 more
</Exception>
所以我想知道的是如何做到這一點。 我已經閱讀了類似的帖子,但說實話,我仍然不明白我必須添加此映射來解決問題。 也只是指出Web服務的部署很好,wsdl也很好。
很抱歉很長的帖子,但希望有人可以幫助我..
問題是由於Java2WSDL無法使用Java Collections,因此解決方案是在使用Web Services並使用Arrays時不使用Java Collections。
基本上為了使我的Web服務工作,我做了以下更改。
package com.example.service;
import com.example.models;
public class MyService {
public MyClass[] getExampleData(// a parameter) {
// Do something
return myClassArray;
}
}
對於想要了解有關Java Collections的Java2WSDL inability的更多信息的任何人,您可以參考Java Web服務:IBM DeveloperWorks的Axis2數據綁定 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.