我又来了。也许有人能帮我。我在Stackoverflow上阅读了所有关于用Soap发送请求的线程,等等。我在谷歌上了很多教程,但没什么能帮我。所以请帮帮我..。我在这个问题上被困了一个星期.
问题/问题:
我有一个Soaphelper.java,它管理着我的安卓应用程序的所有连接。到目前为止,一切都很好,但是现在我需要执行一个将数据发送到服务器的请求。例如。当我使用Displayname " start“和EntryCodeNumber”10“发出请求并将其发送到服务器时,服务器将开始跟踪时间。我只需要把数据发送给服务器,而不是更多.后台的所有东西都是由服务器完成的。

在我的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";ApplyTrackingData= "ApplyTrackingData";命名空间= "http://tempuri.org/";
这就是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发布于 2016-01-19 10:57:51
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());
}发布于 2016-01-20 11:46:53

在这里传递您的原始用户名和密码
https://stackoverflow.com/questions/34873855
复制相似问题