首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SOAPUI向WSDL发送数据/请求?

如何使用SOAPUI向WSDL发送数据/请求?
EN

Stack Overflow用户
提问于 2016-01-19 10:06:52
回答 2查看 912关注 0票数 0

我又来了。也许有人能帮我。我在Stackoverflow上阅读了所有关于用Soap发送请求的线程,等等。我在谷歌上了很多教程,但没什么能帮我。所以请帮帮我..。我在这个问题上被困了一个星期.

问题/问题:

我有一个Soaphelper.java,它管理着我的安卓应用程序的所有连接。到目前为止,一切都很好,但是现在我需要执行一个将数据发送到服务器的请求。例如。当我使用Displayname " start“和EntryCodeNumber”10“发出请求并将其发送到服务器时,服务器将开始跟踪时间。我只需要把数据发送给服务器,而不是更多.后台的所有东西都是由服务器完成的。

在我的SoapHelper.java上,我把这个叫做ApllyTrackingService

代码语言:javascript
复制
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;}

这就是我的要求:

代码语言:javascript
复制
ApplyTrackingData{Username=xxxxxxxxxxxxxxxxxxx==; Password=xxxxxxxxxxxx; DisplayName=Start; EntryCodeNumber=10; }

我在response=envelope.bodyIn上看到了这个

代码语言:javascript
复制
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";ApplyTrackingData= "ApplyTrackingData";命名空间= "http://tempuri.org/";

这就是wsdl

代码语言:javascript
复制
http://cloud.progresso-group.de/Services/TrackingService.svc?singleWsdl

编辑":

所以在检查了SOAP动作和端点之后,我得到了一个不同的失败文本.

这是我的整个肥皂调用部分

代码语言:javascript
复制
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;
}

这就是我们的回应:

代码语言:javascript
复制
SoapFault - faultcode: 'a:InternalServiceFault' faultstring: 'value should not be null.Parametername: value' faultactor: 'null' detail: org.kxml2.kdom.Node@a0bec6a

新请求

这一请求如何:

代码语言:javascript
复制
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);

.

代码语言:javascript
复制
 envelope.setOutputSoapObject(request2);

现在我收到这样的信息:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2016-01-19 10:57:51

代码语言:javascript
复制
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());
        }
票数 0
EN

Stack Overflow用户

发布于 2016-01-20 11:46:53

在这里传递您的原始用户名和密码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34873855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档