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

时间:2016-01-19 10:06:52

标签: soap wsdl request

我又来了。也许有人可以帮助我。我已经在Stackoverflow上阅读了所有关于使用Soap发送请求的线程,等等。我用谷歌搜索了很多教程,但没有任何帮助。所以请求帮助我......我在这个问题上被困了一个星期......

问题/问题:

我有一个Soaphelper.java管理我的Android应用程序的所有连接的东西。到目前为止,所有这些都很好,但现在我需要做一个将数据发送到服务器的请求。例如。当我使用Displayname" Start"和EntryCodeNumber" 10"并将其发送到服务器,服务器将开始跟踪时间。我只是将数据发送到服务器而不是更多......后台的所有内容都是由服务器完成的。

reqeust and response 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&#34 ;;     METHOD =" ApplyTrackingData&#34 ;;     NAMESPACE =" http://tempuri.org/&#34 ;;     网址=" https://xxxxxxxxxxx/Services/TrackingService.svc&#34 ;;

那就是wsdl

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

编辑":

所以在检查SOAP Action和Endpoints之后,现在我得到了一个不同的失败文本...

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

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

2 个答案:

答案 0 :(得分:0)

#import "EmployeeClass.h"

@implementation EmployeeClass
- (id)init {
    self = [super init];

    if(self) {


        self.status = [NSString new];
        self.statusCode = [NSString new];
        self.description = [NSString new];
        self.employeeId = [NSString new];
        self.Present = [NSString new];
        self.Leave = [NSString new];
        self.Absent = [NSString new];
        self.PFCode = [NSString new];


        //do any more customization to your location manager
    }

    return self;
}
+ (EmployeeClass *)sharedSingleton {
    static EmployeeClass *sharedSingleton;
    @synchronized(self) {
        if (sharedSingleton == nil) {
            sharedSingleton = [[EmployeeClass alloc] init];
        }
    }
    return sharedSingleton;
}



@end

答案 1 :(得分:0)

pass your original username and Password here 在此处传递您的原始用户名和密码