1

我正在使用ksoap2 (ksoap2-android-assembly-3.0.0-RC.1-jar-with-dependencies.jar) 将我的android应用程序与在jboss 7 (jboss-as-7.1.1_Final & jbossws-cxf-4.0.2.GA) 与jaxws -2.2.6-2-20120518。

我能够获取任何数据(任何意味着我的自定义对象),但我无法发送它们。我已经关注了这篇文章。我的对象(名为“Frame”)正在实现 org.ksoap2.serialization.KvmSerializable。

我的请求包装类看起来像:

@XmlRootElement(name = "addFrame", namespace = "http://frame.service.server.android.i2.eu/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "addFrame", namespace = "http://frame.service.server.android.i2.eu/")
public class AddFrame {

    @XmlElement(name = "arg0")
    private Frame frame;

    public Frame getFrame() {
        return frame;
    }

    public void setFrame(Frame frame) {
        this.frame = frame;
    }
}

当我尝试使用 java se 方法(javax.xml.namespace.QName & javax.xml.ws.Service)发送对象(不在 android 内部)时,对象被持久保存在我的 mssql 数据库中,所以我认为我的 android 存在一些问题客户端实现。

String namespace = "http://frame.service.server.android.i2.eu/";
String wsdl = "http://localhost:8080/AndroidServer/AndreyServices/FrameService?wsdl";
String action = "addFrame";
String method = "http://frame.service.server.android.i2.eu/addFrame";

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

SoapObject request = new SoapObject(namespace, action)

PropertyInfo info = new PropertyInfo();
info.setType(Frame.class);
info.setValue(frame);//frame as a java method parameter
info.setName("arg0");
request.addProperty(info);

envelope.setOutputSoapObject(request);

HttpTransportSE soapCall = new HttpTransportSE(wsdl);
soapCall.call(action, envelope);

在此之后我收到:

  • 安卓日志:
07-22 16:48:51.256: E/FRAME(1013): eu.i2.android.delegate.exception.DelegateException: SoapFault - faultcode: 'soap:Client' faultstring: 'Unmarshalling Error: null' faultactor: 'null'详细信息:空
07-22 16:48:51.256: E/FRAME(1013): eu.i2.android.interfaces.exceptions.CommunicationException: eu.i2.android.delegate.exception.DelegateException: SoapFault - faultcode: 'soap:Client' faultstring :'解组错误:null'故障因素:'null'详细信息:null
07-22 16:48:51.256: E/FRAME(1013): at eu.i2.android.communication.Communication.addFrame(Communication.java:81)
07-22 16:48:51.256: E/FRAME(1013): 在 eu.u2.android.client.Client.onCreate(Client.java:54)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-22 16:48:51.256: E/FRAME(1013): 在 android.os.Handler.dispatchMessage(Handler.java:99)
07-22 16:48:51.256: E/FRAME(1013): 在 android.os.Looper.loop(Looper.java:123)
07-22 16:48:51.256: E/FRAME(1013): 在 android.app.ActivityThread.main(ActivityThread.java:4627)
07-22 16:48:51.256: E/FRAME(1013): 在 java.lang.reflect.Method.invokeNative(Native Method)
07-22 16:48:51.256: E/FRAME(1013): 在 java.lang.reflect.Method.invoke(Method.java:521)
07-22 16:48:51.256: E/FRAME(1013): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-22 16:48:51.256: E/FRAME(1013): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-22 16:48:51.256:E/FRAME(1013):在 dalvik.system.NativeStart.main(本机方法)
07-22 16:48:51.256: E/FRAME(1013): 由: eu.i2.android.delegate.exception.DelegateException: SoapFault - faultcode: 'soap:Client' faultstring: 'Unmarshalling Error: null' faultactor: “空”详细信息:空
07-22 16:48:51.256: E/FRAME(1013): 在 eu.i2.android.delegate.delegates.FrameDelegate.addFrame(FrameDelegate.java:152)
07-22 16:48:51.256: E/FRAME(1013): at eu.i2.android.communication.Communication.addFrame(Communication.java:79)
07-22 16:48:51.256: E/FRAME(1013): ... 14 更多
07-22 16:48:51.256: E/FRAME(1013): 原因: SoapFault - 故障代码: 'soap:Client' faultstring: 'Unmarshalling Error: null' faultactor: 'null' detail: null
07-22 16:48:51.256: E/FRAME(1013): 在 org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:141)
07-22 16:48:51.256: E/FRAME(1013): 在 org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:140)
07-22 16:48:51.256: E/FRAME(1013): 在 org.ksoap2.transport.Transport.parseResponse(Transport.java:116)
07-22 16:48:51.256: E/FRAME(1013): 在 org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:235)
07-22 16:48:51.256: E/FRAME(1013): 在 org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:114)
07-22 16:48:51.256: E/FRAME(1013): 在 eu.i2.android.delegate.AbstractDelegate$SoapCall.call(AbstractDelegate.java:219)
07-22 16:48:51.256: E/FRAME(1013): 在 eu.i2.android.delegate.delegates.FrameDelegate.addFrame(FrameDelegate.java:141)
07-22 16:48:51.256: E/FRAME(1013): ... 15 更多
  • 服务器日志:
18:48:52,057 警告 [org.apache.cxf.phase.PhaseInterceptorChain] (http-localhost-127.0.0.1-8080-2) {http://frame.service.server.android.i2.eu/} 的拦截器AndreyServices#{http://frame.service.server.android.i2.eu/}addFrame 已抛出异常,现在展开:org.apache.cxf.interceptor.Fault: Unmarshalling Error: null
    在 org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:808)
    在 org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:642)
    在 org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:156)
    在 org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109)
    在 org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
    在 org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    在 org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:207)
    在 org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:91)
    在 org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:169)
    在 org.jboss.wsf.stack.cxf.CXFServletExt.invoke(CXFServletExt.java:87)
    在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:185)
    在 org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:108)
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    在 org.jboss.wsf.stack.cxf.CXFServletExt.service(CXFServletExt.java:135)
    在 org.jboss.wsf.spi.deployment.WSFServlet.service(WSFServlet.java:140) [jbossws-spi.jar:2.0.3.GA]
    在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final]
    在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
    在 org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final]
    在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    在 java.lang.Thread.run(未知来源)[rt.jar:1.6.0_33]
引起:java.lang.NullPointerException
    在 org.apache.cxf.jaxb.io.DataReaderImpl$WSUIDValidationHandler.handleEvent(DataReaderImpl.java:69)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:655)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleError(UnmarshallingContext.java:691)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleError(UnmarshallingContext.java:687)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.Loader.handleParseConversionException(Loader.java:271)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:69)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:514)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.processText(StAXStreamConnector.java:339)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleEndElement(StAXStreamConnector.java:217)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:186)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:369)
    在 com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:348)
    在 org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:778)
    ... 29 更多

我没有在 jboss 模块中安装任何jar

先感谢您!

4

3 回答 3

2

android 客户端中的 null 在类中缺少 SoapObjects 扩展,我建议在 android 上也使用 CXF 客户端,因为它会自动生成类。

http://code.google.com/p/android-ws-client/

于 2012-11-05T21:53:08.753 回答
0

谢谢您的回答。

我已经设法通过简单地编写实现 org.ksoap2.serialization.Marshal 的编组器类来解决我的问题。之后,正确构建了 CXF 拦截器流并且正确序列化了 SOAP 信封,因此我已将我的实现移至 android 项目。

于 2012-11-20T18:28:16.590 回答
0

每个字段都为空的问题主要是由于命名空间问题。您通过 SOAP 发送的数据未映射到服务器端的对象元素,因此它们为空/零。

我建议使用命名空间。

如果您在此处发布您的 WSDL 代码,对我们给出明确的答案会更有帮助。

也看看我的解决方案,我遇到了类似的问题。

使用 ksoap2 将对象从 android 传递给 wcf soap 服务;它发送和接收 0

于 2012-10-30T03:22:29.967 回答