我想通过Android调用web服务.我需要通过HTTP将一些XML发布到URL.我发现这是剪辑发送POST,但我不知道如何包含/添加XML数据本身.
public void postData() {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.10.4.35:53011/");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("Content-Type", "application/soap+xml"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Where/how to add the XML data?
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
Run Code Online (Sandbox Code Playgroud)
这是我需要模仿的完整POST消息:
POST /a8103e90-f1e3-11dd-bfdb-8b1fcff1a110 …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport').setLevel(logging.DEBUG)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
SB_PRIVATE_ACCESS = {"PATH":"https://thisurl.com:443/services/",}
client = Client(SB_PRIVATE_ACCESS['PATH'])
print client
Run Code Online (Sandbox Code Playgroud)
但我得到了500个错误.我试图通过SUD将生成和接收的XML发送给wsdl开发人员,但我无法想出如何输出它?我一直在查看SUD的文档,但似乎无法找到它:/有谁知道如何输出发送和接收的原始xml?
是否可以包含Windows域凭据以使用SOAP UI测试我的Web服务?
我找到了一个属性页面,但IIS只响应"错误的凭据".
我偶然发现了NOAA的SOAP服务,它让我思考.政府还向企业和公众提供了哪些其他电子政务服务?我知道美国有很多API,但其他政府如欧盟呢.我不仅对SOAP感兴趣,而且对通过互联网向公众提供的任何远程过程调用(RPC)服务感兴趣.我不仅对数据源感兴趣,还对其他类型的API感兴趣.
我需要记录所有SOAP请求CommonLogFormat(请参阅http://en.wikipedia.org/wiki/Common_Log_Format),加上持续时间(处理请求所需的时间).
最好的方法是什么?看起来可以为Spring WebServices配置log4j,但它会记录我感兴趣的所有值吗? http://pijava.wordpress.com/2009/12/04/spring-webservice-soap-requestresponse-logging-with-log4j/
编辑:我们实际上是在使用SLF4J,而不是Log4j.此外,看起来可以通过配置PayloadLoggingInterceptor来实现这一点:http://static.springsource.org/spring-ws/site/reference/html/server.html#server-endpoint-interceptor
但我不确定日志消息的去向.我向拦截器添加了拦截器,但没有看到任何日志消息.
当我尝试生成一个看起来像的元素时,我收到一个错误
<hold/>
Run Code Online (Sandbox Code Playgroud)
使用Axis2生成的java客户端代码.java片段
HoldPayment hold = new HoldPayment()
cr.setHold(hold);
Run Code Online (Sandbox Code Playgroud)
但当我关闭它时,我收到错误的WRONG_DOCUMENT_ERR.如果我没有在被触发的消息中包含此元素,则它可以正常工作.有谁知道如何解决它?
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:352)
at com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:284)
at com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:235)
at org.apache.axis.message.SOAPFaultBuilder.onEndChild(SOAPFaultBuilder.java:305)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1090)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) …Run Code Online (Sandbox Code Playgroud) 到目前为止,我已成功使用fiddler来嗅探来自测试装置,控制台应用程序和Web项目的Web服务流量.
今天我注意到,如果我正在运行我的Web应用程序(它是一个ASP.NET网站,在IIS上本地托管),我将无法再嗅到那种流量.我看到所有本地流量,但Web服务流量刚刚消失(服务正在被点击,因为我看到响应调试到代码中).
我仍然能够在同一解决方案(完全相同的环境)中成功地从测试装置或控制台应用程序中嗅探肥皂请求和响应.
如果它是一个Windows(我在Win7上)安全更新或喜欢它将永远不会工作我猜(除非它只影响通过IIS路由的流量).
我应该寻找什么可能导致出现这种行为?
任何指针赞赏!
注意:我可以看到本地流量,但不能看到本地未托管的Web服务的SOAP请求/响应(这是另一个团队提供的沙箱)
编辑:这一点配置起到了作用(在Rick Strahl的博客上找到)
<system.net>
<defaultProxy>
<proxy
usesystemdefault="False"
bypassonlocal="True"
proxyaddress="http://127.0.0.1:8888"/>
</defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud) 从suds 文档中,我可以创建一个Client如果我有一个WSDL的URL.
from suds.client import Client
url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
client = Client(url)
Run Code Online (Sandbox Code Playgroud)
我目前在我的文件系统上有WSDL文件.是否可以使用suds从我的文件系统读取WSDL文件而不是在Web服务器上托管它?
我正在实现一个Web服务,我已经实现了REST和SOAP版本,以查看哪个适合我的需求.我决定选择REST因为它的简单性,我可能会开发一个iPhone应用程序来使用它.我的问题很简单,是否可以为我的REST服务创建WSDL或WADL,是否有必要?
谢谢
SOAP和HTTP协议之间有什么区别.当我们说"SOAP over HTTP"时,这是什么意思.