- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Android 开发新手。我需要使用根据 OASIS Web Services Security specification 设计的 .NET Web 服务.
我正在使用 KSOAP2 最新 API 生成 SOAP 信封。我需要严格按照以下格式发送 SOAP 请求
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soap:Header>
<wsa:Action>http://myXYZ_Action</wsa:Action>
<wsa:MessageID>XYZ</wsa:MessageID>
<wsa:ReplyTo>
<wsa:Address>http://something.com</wsa:Address>
</wsa:ReplyTo>
<wsa:To>http://something.asmx</wsa:To>
<wsse:Security soap:mustUnderstand="1">
<wsu:Timestamp wsu:Id="XYZ">
<wsu:Created>2012-03-02T14:03:24Z</wsu:Created>
<wsu:Expires>2012-03-02T14:08:24Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-XYZ">
<wsse:Username>XYZ</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XYZ</wsse:Password>
<wsse:Nonce>XYZ==</wsse:Nonce>
<wsu:Created>2012-03-02T14:04:24Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<DoSomeThing xmlns="http://something"/></soap:Body>
</soap:Envelope>
在进行大量搜索并引用在线帮助后,我已经能够使用 KSOAP2 生成 SOAP 请求,如下所示
<?xml version="1.0" encoding="utf-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header>
<Action>http://myXYZ_Action</Action>
<MessageID>XYZ</MessageID>
<ReplyTo>
<Address>http://something.com</Address>
</ReplyTo>
<To>http://something.asmx</To>
<Security mustUnderstand="1">
<Timestamp Id="XYZ">
<Created>2012-03-02T14:03:24Z</Created>
<Expires>2012-03-02T14:08:24Z</Expires>
</Timestamp>
<n0:UsernameToken xmlns:n0="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<Username>XYZ</Username>
<Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XYZ</Password>
<Nonce>XYZ==</Nonce>
<Created>2012-03-06T00:04:24Z</Created>
</n0:UsernameToken>
</Security>
</v:Header>
<v:Body>
<GetActualDateTime xmlns="http://something/" />
</v:Body>
</v:Envelope>
出于安全目的,某些信息已被屏蔽。
public class TestActivity extends Activity {
/** Called when the activity is first created. */
private static final String SOAP_ACTION = "http://myXYZ_Action";
private static final String METHOD_NAME = "DoSomeThing";
private static final String NAMESPACE = "http://something/";
private static final String URL = "http://xyz.asmx/wse";
TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.xsd = SoapSerializationEnvelope.XSD;
envelope.xsi= SoapSerializationEnvelope.XSI;
envelope.env= SoapSerializationEnvelope.ENV;
//Prepare header
envelope.headerOut = new Element[5];
envelope.headerOut[0] = buildActionHeader();
envelope.headerOut[1] = buildMessageIDHeader();
envelope.headerOut[2] = buildReplyToHeader();
envelope.headerOut[3] = buildToHeader();
envelope.headerOut[4] = buildSecurityHeader();
envelope.dotNet=true;
envelope.implicitTypes=true;
envelope.setAddAdornments(false);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
androidHttpTransport.debug=true;
androidHttpTransport.call(SOAP_ACTION, envelope);
//To be removed. This is just to check the request and response.
@SuppressWarnings("unused")
String req = androidHttpTransport.requestDump;
@SuppressWarnings("unused")
String res = androidHttpTransport.responseDump;
//End
Object result = (Object)envelope.getResponse();
@SuppressWarnings("unused")
String[] results = (String[]) result;
}
catch (Exception e)
{
e.printStackTrace();
}
}
private Element buildActionHeader() {
// TODO Auto-generated method stub
//<wsa:Action> Element
Element actionElement = new Element().createElement("", "Action");
actionElement.addChild(Node.TEXT, "http://myXYZ_Action");
return actionElement;
}
private Element buildMessageIDHeader() {
// TODO Auto-generated method stub
//<wsa:MessageID> Element
Element messageIDElement = new Element().createElement("", "MessageID");
messageIDElement.addChild(Node.TEXT, "XYZ");
return messageIDElement;
}
private Element buildReplyToHeader() {
// TODO Auto-generated method stub
//<wsa:Address> Element
Element addressElement = new Element().createElement("", "Address");
addressElement.addChild(Node.TEXT, "http://something.com");
//<wsa:ReplyTo> Element
Element replyToElement = new Element().createElement("", "ReplyTo");
replyToElement.addChild(Node.ELEMENT, addressElement);
return replyToElement;
}
private Element buildToHeader() {
Element toElement = new Element().createElement("", "To");
toElement.addChild(Node.TEXT, "http://something.asmx");
return toElement;
}
private Element buildSecurityHeader() {
Element securityElement = new Element().createElement(null, "Security");
securityElement.setAttribute(null, "mustUnderstand", "1");
//<wsu:Timestamp> Element
Element timestampElement = new Element().createElement(null, "Timestamp");
timestampElement.setAttribute(null, "Id", "XYZ");
//<wsu:Created> Element
Element createdElement = new Element().createElement(null, "Created");
createdElement.addChild(Node.TEXT, "2012-03-06T00:01:24Z");
//<wsu:Expires> Element
Element expiresElement = new Element().createElement(null, "Expires");
expiresElement.addChild(Node.TEXT, "2012-03-06T00:05:24Z");
timestampElement.addChild(Node.ELEMENT, createdElement);
timestampElement.addChild(Node.ELEMENT,expiresElement);
Element usernameTokenElement = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "UsernameToken");
Element usernameElement = new Element().createElement(null, "Username");
usernameElement.addChild(Node.TEXT, "XYZ");
Element passwordElement = new Element().createElement(null, "Password");
passwordElement.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
passwordElement.addChild(Node.TEXT, "XYZ");
Element nonceElement = new Element().createElement(null, "Nonce");
nonceElement.addChild(Node.TEXT, "XYZ====");
Element created2Element = new Element().createElement(null, "Created");
created2Element.addChild(Node.TEXT, "2012-03-06T00:04:24Z");
usernameTokenElement.addChild(Node.ELEMENT, usernameElement);
usernameTokenElement.addChild(Node.ELEMENT, passwordElement);
usernameTokenElement.addChild(Node.ELEMENT, nonceElement);
usernameTokenElement.addChild(Node.ELEMENT, created2Element);
securityElement.addChild(Node.ELEMENT, timestampElement);
securityElement.addChild(Node.ELEMENT, usernameTokenElement);
return securityElement;
}
}
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
to
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
OR
xmlns:d="http://www.w3.org/2001/XMLSchema"
to
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
AND
<v:Envelope> to <soap:Envelope> ; <Action> to <wsa:Action> ;
<n0:UsernameToken xmlns:n0="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
TO
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-XYZ">
最佳答案
xmlns:i token 的这部分无关紧要,只要它引用的命名空间是正确的即可
上面的答案对我有用,就像 ie: xmlns:i xmlns:v 等
关于android - 使用 KSOAP2 根据 OASIS WS 安全规范生成复杂的 SOAP 信封?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633733/
我的 kSOAP 网络服务将 xml 返回为这种格式我如何从中获取 country_name anyType{country=anyType{country_name=Egypt; };
我能够使用 ksoap2 获取复杂的类响应,现在我得到的响应是 xml 形式 任何人都可以帮我解决如何解析这个 Ksoap 响应吗?我已经在论坛上阅读了为它添加映射的内容,我也添加了映射。我可以使用
我一直在使用 Android 版 KSOAP 发送包含 6 个元素的 SOAP 请求,最后一个元素是一个值数组。这是代码... PropertyInfo properties[] = n
我在我的 Android 应用程序中使用 KSoap。我的应用程序使用 Web 服务与服务器通信。我找到了一个 KSoap wev 服务客户端的代码示例。在示例中,客户端使用以下代码与服务器进行通信
我正在使用 KSOAP2 调用 Web 服务。我收到了回复,但该回复中的特殊字符未正确显示。 我怎样才能改变它? 编辑: 以下代码负责发送和接收数据: package org.ksoap2.trans
我正在使用 Android ksoap2 库来使用 SOAP 网络服务。 请求中的一个节点看起来像.. //some more nodes .............
我有 ksop 请求。我揉出来的是 asdfdsafdsfasdfdsa
我正在使用支持超时的 ksoap2 2.5.4(在 Android 2.2 上)。我正在使用 Apache 2.2.16 来处理我的请求。一切正常,但当我关闭我的 Apache(或断开运行 Apach
帮帮我,我花了大约 3 周的时间搜索整个 www,但无法正常工作! 我有一个 WS,只想让我的应用程序有响应。但不幸的是,我在更正所有内容后总是得到以下错误! 08-09 15:29:30.930:
当向 soap 对象添加属性时无法指定其类型....我需要整数但它总是将其设置为“d:string”1312191347这是我添加属性(property)的方式: SoapObject _client
我在尝试使用 kSOAP2 在 Android 中使用 ColdFusion SOAP 服务时遇到了一个问题。这是我的 java 代码,用于调用我在 ColdFusion 中编写的测试方法(它只返回一
我正在尝试通过 kSOAP(直接从 Google 下载并包含“.jar”)调用公共(public) Web 服务 (w3schools.com/webservices/tempconvert.asmx
有没有人有使用 kSOAP 包的良好的复杂对象编码示例? 最佳答案 虽然这个例子不是可编译的和完整的,但基本思想是有一个类告诉 kSOAP 如何将 XML 标记转换为对象(即 readInstance
我正在通过 SOAP 发送多个 PDF 文件,Android 客户端将接收这些文件。但是当收到 SOAP 响应时,它会抛出 OutOfMemoryException。 我想知道它是否是 kSOAP 或
我正在使用 Android 中的 Ksoap 访问 .net 网络服务。 wsdl 的格式是这样的 Date1 Date2 我对 DateTo 使用相同的 addPropert
我不知道为什么我不能得到这个?......也许我遗漏了什么或者我太笨了 我想尝试从 Android 应用程序调用网络服务 现在要做到这一点,发现适用于 Android 的 kSOAP 2 是所需的库
我正在使用 ksoap2 (ksoap2-android-assembly-3.0.0-RC.1-jar-with-dependencies.jar) 与我的 android 应用通信在 jboss
我在下面显示的代码中使用 soap 访问 Web 服务并收到以下错误,我需要帮助来理解: SoapFault - faultcode: 'soap:Server' faultstring: 'Syst
我希望生成像这样的 soap 请求: - - Connect -
马上,这是我的 Soap 调用实现,减去不相关的位。 public class MySoapClient implements AbstractSoapClient { private Str
我是一名优秀的程序员,十分优秀!