繁体   English   中英

如何使用SOAPUI将数据/请求发送到WSDL?

[英]How to send Data/request to WSDL with SOAPUI?

我又来了 也许有人可以帮助我。 我在这里阅读了Stackoverflow上所有有关使用Soap发送请求的线程。 我在Google上搜索了很多教程,但没有任何帮助。 所以,请帮我...我在这个问题上停留了大约一周....

问题/问题:

我有一个Soaphelper.java,它管理着我的android应用程序的所有连接内容。 到目前为止,一切都很好,但是现在我需要执行一个将数据发送到服务器的请求。 例如。 当我使用显示名称“开始”和EntryCodeNumber“ 10”发出请求并将其发送到服务器时,服务器将开始跟踪时间。 我只需要将该数据发送到服务器上就更多了……后台中的所有工作都是由服务器完成的。

需求与响应SoapUI

在我的SoapHelper.java上,我将其称为ApllyTrackingService

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("Username", convertToBase64user(user));
request.addProperty("Password", convertToBase64pass(pass));
request.addProperty("DisplayName", Displayname);
request.addProperty("EntryCodeNumber", EntryCode);
request.addProperty("EntryCodeNumber", EntryCode);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
response = (SoapObject) envelope.bodyIn;
return response;
} catch (Exception e) {
return response;}

多数民众赞成在请求:

ApplyTrackingData{Username=xxxxxxxxxxxxxxxxxxx==; Password=xxxxxxxxxxxx; DisplayName=Start; EntryCodeNumber=10; }

我在response = envelope.bodyIn上得到这个

SoapFault - faultcode: 'a:ActionNotSupported' faultstring: 'Die Nachricht mit Action "http://tempuri.org/ITrackingService/ApplyTrackingData" kann aufgrund einer fehlenden ContractFilter-Übereinstimmung beim EndpointDispatcher nicht verarbeitet werden. Mögliche Ursachen: Vertragskonflikt (keine Action-Übereinstimmung zwischen Sender und Empfänger) oder ein Bindung/Sicherheit-Konflikt zwischen dem Sender und dem Empfänger.  Stellen Sie sicher, dass Sender und Empfänger über den gleichen Vertrag und die gleiche Bindung verfügen (einschließlich Sicherheitsanforderungen, z. B. "Message", "Transport", "None").' faultactor: 'null' detail: null

我尝试了很多事情,但在该问题上停留了大约一周的时间。 希望可以有人帮帮我。

编辑:SOAP_ACTION =“ http://tempuri.org/ITrackingService/ApplyTrackingData ”; METHOD =“ ApplyTrackingData”; NAMESPACE =“ http://tempuri.org/ ”; URL =“ https://xxxxxxxxxxx/Services/TrackingService.svc ”;

那就是wsdl

http://cloud.progresso-group.de/Services/TrackingService.svc?singleWsdl

编辑“:

因此,在检查了SOAP操作和端点之后,现在我得到了另一个失败文本...

这是我整个肥皂调用部分

SoapObject request2 = new SoapObject(NAMESPACE, METHOD_NAME);
request2.addProperty("Username", convertToBase64user(user));
request2.addProperty("Password", convertToBase64pass(pass));
request2.addProperty("DisplayName", Displayname);
request2.addProperty("EntryCodeNumber", EntryCode);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
Element headers[] = new Element[1];
headers[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security");
headers[0].setAttribute(envelope.env, "mustUnderstand", "1");
Element security = headers[0];
Element to = new Element().createElement(security.getNamespace(), "UsernameToken");
to.setAttribute("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "UsernameToken-2");
Element action1 = new Element().createElement(security.getNamespace(), "Username");action1.addChild(Node.TEXT, user);

to.addChild(Node.ELEMENT, action1);
Element action2 = new Element().createElement(security.getNamespace(), "Password");
action2.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");action2.addChild(Node.TEXT, pass);
to.addChild(Node.ELEMENT, action2);headers[0].addChild(Node.ELEMENT, to);envelope.headerOut = headers;envelope.setOutputSoapObject(request2);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
    androidHttpTransport.debug = true;
    androidHttpTransport.call(SOAP_ACTION, envelope);
    response = (SoapObject) envelope.bodyIn;
 //   updateUiWithResult(response);
  return response;
} catch (Exception e) {
    return response;
}

那就是响应:

SoapFault - faultcode: 'a:InternalServiceFault' faultstring: 'value should not be null.Parametername: value' faultactor: 'null' detail: org.kxml2.kdom.Node@a0bec6a

新要求

该请求如何:

SoapObject request2 = new SoapObject(NAMESPACE, APPLYTRACKINGDATA_METHOD);
SoapObject apply =new SoapObject(NAMESPACE,"trackingAction");
PropertyInfo DisplayName1 = new PropertyInfo();
        DisplayName1.name="DisplayName";
        DisplayName1.setValue("Start");
        apply.addProperty(DisplayName1);
PropertyInfo EntryCodeNumber1 = new PropertyInfo();
        EntryCodeNumber1.name="EntryCodeNumber";
        EntryCodeNumber1.setValue(10);
        apply.addProperty(EntryCodeNumber1);
        request2.addSoapObject(apply);

......

 envelope.setOutputSoapObject(request2);

现在,我收到此消息:

SoapFault - faultcode: 'a:DeserializationFailed' faultstring: 'Der Formatierer hat beim Deserialisieren der Nachricht eine Ausnahme ausgelöst: Fehler beim Deserialisieren von Parameter http://tempuri.org/:trackingAction. Die InnerException-Nachricht war "Fehler in Zeile 1, Position 851. Das Element "http://tempuri.org/:trackingAction" enthält Daten eines Typs, der dem Namen "http://tempuri.org/:trackingAction" zugeordnet ist. Dem Deserialisierungsprogramm ist kein Typ bekannt, der diesem Namen zugeordnet ist. Verwenden Sie ggf. einen DataContractResolver, wenn Sie DataContractSerializer verwenden, oder fügen Sie den entsprechenden Typ für "trackingAction" der Liste der bekannten Typen hinzu. Verwenden Sie dazu z. B. das Attribut "KnownTypeAttribute", oder fügen Sie den Typ der an das Serialisierungsprogramm übergebenen Liste von bekannten Typen hinzu.".  Weitere Details finden Sie unter "InnerException".' faultactor: 'null' detail: org.kxml2.kdom.Node@6ac440d
SoapObject apply = new SoapObject(NAMESPACE, METHOD_NAME);
        PropertyInfo DisplayName1 =new PropertyInfo();
        DisplayName1.name="DisplayName";
        DisplayName1.setValue("Start");
        apply.addProperty(DisplayName1);


        PropertyInfo EntryCodeNumber1 = new PropertyInfo();
        EntryCodeNumber1.name="EntryCodeNumber";
        EntryCodeNumber1.setValue(10);
        apply.addProperty(EntryCodeNumber1);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);


        // create header
        Element[] header = new Element[1];
        header[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security");
        header[0].setAttribute(null, "mustUnderstand","1");

        Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
        usernametoken.setAttribute(null, "Id", "UsernameToken-1");
        header[0].addChild(Node.ELEMENT,usernametoken);

        Element username = new Element().createElement(null, "n0:Username");
        username.addChild(Node.IGNORABLE_WHITESPACE,"PASSYOURUSERNAMEHERE");
        usernametoken.addChild(Node.ELEMENT,username);

        Element pass = new Element().createElement(null,"n0:Password");
        pass.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
        pass.addChild(Node.TEXT, "PASSYOURPASSWORDHERE");

        usernametoken.addChild(Node.ELEMENT, pass);


        // add header to envelope
        envelope.headerOut = header;   


        envelope.dotNet = true;
        envelope.bodyOut = apply;
        envelope.setOutputSoapObject(apply);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);


        try 
        {
            androidHttpTransport.debug = true;
            androidHttpTransport.call(SOAP_ACTION, envelope);

            SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
            Log.i(response.toString());
        } 
        catch (SoapFault e)
        {
            e.printStackTrace();
        }
        catch (Exception e) 
        {
            e.printStackTrace();
            Log.d("Exception Generated", ""+e.getMessage());
        }

在此处传递您的原始用户名和密码 在此处传递您的原始用户名和密码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM