我如何在Android中使用Web Service SOAP

时间:2017-06-06 01:23:26

标签: android web-services soap

我尝试在Android Project中使用WebService SAP(SOAP)。

WebService

我使用Android Studio和ksoap2-android-assembly-3.6.1.jar ksoap2 library

我的代码就是休闲:

public void executeSAPWebService {
    String nameSapceSap = "urn:sap-com:document:sap:soap:functions:mc-style";
    String urlSap = "http://localhost:8010/sap/bc/srt/rfc/sap/zconsultamtn/300/zconsultamtn/zconsultamtn";
    String methosSap = "Zconsultamtn";
    String soapActionSap = "urn:sap-com:document:sap:soap:functions:mc-style/Zconsultamtn";

    SoapObject soapObject = new SoapObject(nameSapceSap,methosSap);

    PropertyInfo propertyInfoIean = new PropertyInfo();
    PropertyInfo propertyInfoImatnr = new PropertyInfo();
    PropertyInfo propertyInfoIwerks = new PropertyInfo();
    PropertyInfo propertyInfoUser = new PropertyInfo();
    PropertyInfo propertyInfoPwd = new PropertyInfo();

    propertyInfoUser.setName("username");
    propertyInfoUser.setValue("MyUser");
    propertyInfoUser.setType(String.class);
    soapObject.addProperty(propertyInfoUser);

    propertyInfoPwd.setName("password");
    propertyInfoPwd.setValue("myPwd");
    propertyInfoPwd.setType(String.class);
    soapObject.addProperty(propertyInfoPwd);

    propertyInfoIean.setName("IEan");
    propertyInfoIean.setValue("75010553000075");
    propertyInfoIean.setType(String.class);
    soapObject.addProperty(propertyInfoIean);

    propertyInfoImatnr.setName("IMatnr");
    propertyInfoImatnr.setValue("");
    propertyInfoImatnr.setType(String.class);
    soapObject.addProperty(propertyInfoImatnr);

    propertyInfoIwerks.setName("IMatnr");
    propertyInfoIwerks.setValue("0236");
    propertyInfoIwerks.setType(String.class);
    soapObject.addProperty(propertyInfoIwerks);

    PropertyInfo propertyInfoZmueble = new PropertyInfo();
    PropertyInfo propertyInfoZtramo = new PropertyInfo();
    PropertyInfo propertyInfoZnivel = new PropertyInfo();

    propertyInfoZmueble.setName("Zmueble");
    propertyInfoZmueble.setValue("");
    propertyInfoZmueble.setType(String.class);
    soapObject.addProperty(propertyInfoZmueble);

    propertyInfoZtramo.setName("Ztramo");
    propertyInfoZtramo.setValue("");
    propertyInfoZtramo.setType(String.class);
    soapObject.addProperty(propertyInfoZtramo);

    propertyInfoZnivel.setName("Znivel");
    propertyInfoZnivel.setValue("");
    propertyInfoZnivel.setType(String.class);
    soapObject.addProperty(propertyInfoZnivel);

    SoapSerializationEnvelope envelopeSap = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelopeSap.dotNet = false;
    envelopeSap.setOutputSoapObject(soapObject);

    envelopeSap.headerOut = new org.kxml2.kdom.Element[1];
    envelopeSap.headerOut[0] = buildAuthHeader();

    HttpTransportSE httpTransportSE = new HttpTransportSE(urlSap);

    List<HeaderProperty> c = new ArrayList<HeaderProperty>();
    c.add(new HeaderProperty("Authorization","Basic XXXXXXXXXXXXXX"));

    try {
        final Object responde = httpTransportSE.call(soapActionSap,envelopeSap,c);
        SoapPrimitive response = (SoapPrimitive) envelopeSap.getResponse();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

private org.kxml2.kdom.Element buildAuthHeader() {
    org.kxml2.kdom.Element TMuebles = new org.kxml2.kdom.Element().createElement(nameSapceSap,"TMuebles");
    org.kxml2.kdom.Element item = new org.kxml2.kdom.Element().createElement(nameSapceSap,"item");

    org.kxml2.kdom.Element Zmueble = new org.kxml2.kdom.Element().createElement(nameSapceSap,"Zmueble");
    Zmueble.addChild(Node.TEXT,"");
    item.addChild(Node.ELEMENT,Zmueble);

    org.kxml2.kdom.Element Ztramo = new org.kxml2.kdom.Element().createElement(nameSapceSap,"Ztramo");
    Ztramo.addChild(Node.TEXT,"");
    item.addChild(Node.ELEMENT,Ztramo);

    org.kxml2.kdom.Element Znivel = new org.kxml2.kdom.Element().createElement(nameSapceSap,"Znivel");
    Znivel.addChild(Node.TEXT,"");
    item.addChild(Node.ELEMENT,Znivel);

    TMuebles.addChild(Node.ELEMENT,item);

    return TMuebles;
}

是否应在PropertyInfo对象中发送凭据? 在PropertyInfo对象或org.kxml2.kdom.Element中发送空结构(TMuebles)的正确方法是什么?

当我尝试使用WebService时,会出现以下异常:

06-05 17:28:37.647 27321-27426 / com.example.android.examplewebservice W / System.err:SoapFault - faultcode:&#39; soap-env:Server&#39; faultstring:&#39; Web服务处理错误;提供商端的Web服务错误日志中的更多详细信息(UTC时间戳20170605230903;事务ID 593463DC6B5809C0E1008000AC1CFA8E)&#39; faultactor:&#39; null&#39;详情:org.kxml2.kdom.Node@13a02a98

我错了什么?

0 个答案:

没有答案
相关问题