1

私はksoap2 (ksoap2-android-assembly-3.0.0-RC.1-jar-with-dependencies.jar) を使用て、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) を使用してオブジェクト (アンドロイド内ではない) を送信しようとすると、オブジェクトが mssql データベースに保持されるため、アンドロイドに問題があると思います。クライアントの実装。

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: 'アンマーシャリング エラー: 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 ' faultactor: 'null' 詳細: null
07-22 16:48:51.256: E/FRAME (1013): 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(ネイティブ メソッド) で
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: 'アンマーシャリング エラー: null ' faultactor: 「null」詳細: null
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): 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 - faultcode: 'soap:Client' faultstring: 'アンマーシャリング エラー: null ' faultactor: 'null' 詳細: 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: アンマーシャリング エラー: 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

すべての単一フィールドが null であるというこの問題は、主に名前空間の問題が原因です。SOAP を介して送信しているデータは、サーバー側のオブジェクト要素にマップされていないため、null/ゼロです。

名前空間をいじることをお勧めします。

ここに WSDL コードを投稿していただけると、明確な回答をいただけると助かります。

私の解決策も見てください。同様の問題がありました。

ksoap2 を使用して Android から wcf soap サービスにオブジェクトを渡します。送受信 0

于 2012-10-30T03:22:29.967 に答える