soap 相关问题

简单对象访问协议(SOAP)是用于在Web服务的实现中交换结构化信息的协议规范。


如何使用zeep为签名添加时间戳?

我正在尝试创建一个使用 WSDL 文件并生成正确的 SOAP 消息的客户端。 这就是我创建客户端的方式: 客户 = 客户( wsdl=wsdl ,运输=运输 ...

回答 1 投票 0

如何在 PHP 7.0 Ubuntu 18.10 中启用 SoapClient

我使用 PHP 7.0 Ubuntu 18.10,我无法在 phpinfo() 中启用模块 SoapClient。 我已经删除了“;”在我的 php.ini 配置中并重新启动 apache2 以启用soap模块。

回答 3 投票 0

导入 WSDL 后如何在 Postman 中更新/刷新请求

在Postman中将WSDL导入到新的Collection中({Collection} > Import > Link > Url)后,是否有办法在API修改时更新或刷新Collection的请求? 我已经

回答 1 投票 0

MS_MAX_CONCURRENT_REQ - VIES 增值税验证

我想使用 https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl 确认多个地址。 由于某种原因,我不断收到 MS_MAX_CONCURRENT_REQ 错误。我明白意思了...

回答 2 投票 0

AWS 中的 SOAP 到 REST 转换

我们在 AWS 中的大多数定制应用程序都是容器化的 .NET Core 应用程序,到目前为止,我们不需要构建任何 SOAP API - 几乎我们已交付的所有 API(无论是公开的...

回答 2 投票 0

如何使用 XSLT 从 SOAP 响应中过滤 XML 节点

我有一种情况,我需要从 SOAP 响应中过滤某些 XML 节点,我使用了 XSLT 映射,但它没有从 SOAP 响应中过滤特定的 xml 节点,我的要求是有 xml 节点...

回答 1 投票 0

如何使用 DLNA 浏览 Synology NAS 上的目录?

GET http://192.168.1.5:50001/desc/device.xml 返回以下数据: GET http://192.168.1.5:50001/desc/device.xml 返回以下数据: <?xml version="1.0" encoding="utf-8"?> <root xmlns="urn:schemas-upnp-org:device-1-0"> <specVersion> <major>1</major> <minor>0</minor> </specVersion> <device> <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType> <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50</dlna:X_DLNADOC> <friendlyName>MY-NAS</friendlyName> <manufacturer>Synology Inc</manufacturer> <manufacturerURL>http://www.synology.com/</manufacturerURL> <modelDescription>Synology DLNA/UPnP Media Server</modelDescription> <modelName>DS210j</modelName> <modelURL>http://www.synology.com/</modelURL> <serialNumber>A2G6N03829</serialNumber> <UDN>uuid:00113206-3dd5-0011-d53d-d53d01234567</UDN> <presentationURL>http://192.168.1.5:5000/</presentationURL> <iconList> <icon> <mimetype>image/jpeg</mimetype> <width>120</width> <height>120</height> <depth>24</depth> <url>/tmp_icon/dmsicon120.jpg</url> </icon> <!-- 3 more icons here --> </iconList> <serviceList> <service> <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType> <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId> <SCPDURL>/connmgrSCPD.xml</SCPDURL> <controlURL>/ConnectionManager/control</controlURL> <eventSubURL>/ConnectionManager/event</eventSubURL> </service> <service> <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType> <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId> <SCPDURL>/cdsSCPD.xml</SCPDURL> <controlURL>/ContentDirectory/control</controlURL> <eventSubURL>/ContentDirectory/event</eventSubURL> </service> <service> <serviceType>urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1</serviceType> <serviceId>urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar</serviceId> <SCPDURL>/msrrSCPD.xml</SCPDURL> <eventSubURL>/MediaReceiverRegistrar/event</eventSubURL> <controlURL>/MediaReceiverRegistrar/control</controlURL> </service> </serviceList> </device> </root> 当我尝试执行以下请求时: curl --location 'http://192.168.1.5:50001/ContentDirectory/control' \ --header 'SOAPAction: urn:schemas-upnp-org:service:ContentDirectory:1#Browse' \ --header 'Content-Type: text/xml; charset="utf-8"' \ --data '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <s:Body> <u:Browse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1"> <ObjectID>0</ObjectID> <BrowseFlag>BrowseDirectChildren</BrowseFlag> <Filter>*</Filter> <StartingIndex>0</StartingIndex> <RequestedCount>1000</RequestedCount> <SortCriteria></SortCriteria> </u:Browse> </s:Body> </s:Envelope> 我收到错误代码-111: Invalid Action。这里有什么问题吗? 我尝试从操作中删除 #Browse 并仅发送 #Browse - 这没有帮助。 根据服务器回复,Synology 使用 Linux/2.6.32.12, UPnP/1.0, Portable SDK for UPnP devices/1.6.18。 根据 UPnP 设备架构规范第 3.2 节,调用操作的标头如下所示 POST path of control URL HTTP/1.1 HOST: host of control URL:port of control URL CONTENT-LENGTH: bytes in body CONTENT-TYPE: text/xml; charset="utf-8" SOAPACTION: "urn:schemas-upnp-org:service:serviceType:v#actionName" 所需的 HTTP 方法是 POST;你的命令没有设置这个。 我对curl不太熟悉,但认为添加-X POST可能会达到你想要的效果。

回答 1 投票 0

发送请求时如何强制 JAXB 写入 javax.jws.WebParam 的 xsi:type(CXF 实现)

我在wsdl上使用wsdl2java生成了类,服务接口如下所示 @WebService(targetNamespace = "http://www.sii.example.it/SWG1", name = "SWG1") @XmlSeeAlso({it.au.switchgas....

回答 2 投票 0

修改 CXF Soap 响应以具有不同的前缀并删除命名空间

我们正在从 Axis-2 迁移到 CXF,并尝试获得类似的响应。 Axis-2 对肥皂请求的响应 我们正在从 Axis-2 迁移到 CXF,并尝试获得类似的响应。 Axis-2 对肥皂请求的响应 <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <loginResponse xmlns="urn:TestWebAPI"> <loginReturn xmlns="">9876</loginReturn> </loginResponse> </soapenv:Body> </soapenv:Envelope> 迁移后CXF响应: <?xml version="1.0" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:loginResponse xmlns:ns1="urn:TestWebAPI"> <loginReturn xmlns:ns2="urn:TestWebAPI">9876</loginReturn> </ns1:loginResponse> </soap:Body> </soap:Envelope> 如何使 CXF 响应类似于 Axis-2 响应? 修改 SOAP 前缀 CXF 提供了一个属性 “soap.env.ns.map” 来修改soap响应的前缀。 import org.apache.cxf.binding.soap.Soap11; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import java.util.HashMap; import java.util.Map; public class SoapResponsePrefixInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String soapEnvelopePrefix; public SoapResponsePrefixInterceptor(String soapPrefix) { super(Phase.PREPARE_SEND); soapEnvelopePrefix = soapPrefix; } @Override public void handleMessage(SoapMessage message) { Map<String, String> envelopeNSMap = new HashMap<>(); envelopeNSMap.put(soapEnvelopePrefix, Soap11.SOAP_NAMESPACE); // "http://schemas.xmlsoap.org/soap/envelope/" message.put("soap.env.ns.map", envelopeNSMap); message.put(AbstractOutDatabindingInterceptor.DISABLE_OUTPUTSTREAM_OPTIMIZATION, Boolean.TRUE); } } 包含此类作为out拦截器,以修改soap前缀。 SoapResponsePrefixInterceptor responsePrefixInterceptor = new SoapResponsePrefixInterceptor("soapenv"); factoryBean.getOutInterceptors().add(responsePrefixInterceptor); factoryBean.getOutFaultInterceptors().add(responsePrefixInterceptor); 其逻辑实现于 SoapOutInterceptor.writeSoapEnvelopeStart()。 hasAdditionalEnvNs() 检查应用程序是否配置了任何自定义信封名称 空格并替换为配置的值。 修改或删除命名空间 CXF提供了变压器功能,可以帮助我们修改命名空间。 private Feature getTransformer() { StaxTransformFeature staxFeature = new StaxTransformFeature(); Map<String, String> replaceElements = new HashMap<>(); // value between braces is used as namespace, followed by localName. replaceElements.put('{' + DEFAULT_NAMESPACE + "}*", ""); staxFeature.setOutTransformElements(replaceElements); staxFeature.setOutDefaultNamespace(DEFAULT_NAMESPACE); return staxFeature; } 将此变压器作为一项功能添加到工厂 bean 中。 fb.setFeatures(List.of(getTransformer())); TransformOutInterceptor.createTransformWriterIfNeeded() - 如果设置了任何值,则创建变压器。 RPCOutInterceptor.addOperationNode() > StaxUtils.writeStartElement() > OutTransformWriter.writeStartElement() > OutTransformWriter.write() - 根据转换器修改响应。 同样的逻辑存在于 OutTransformWriter() > TransformUtils.convertToQNamesMap() > DOMUtils.convertStringToQName()

回答 1 投票 0

Siebel 错误:入站 SOAP 消息 XML 解析在第 2 行和第 1 列失败

我正在使用 SoapUI 将带有 MTOM 文件附件的 SOAP 请求发送到 Oracle Siebel 应用程序,但收到此错误: 错误:入站 SOAP 消息 - XML 解析在第 2 行和

回答 1 投票 0

org.apache.cxf.binding.soap.SoapFault:证书路径验证期间出错:路径不与任何信任锚链接

我正在创建一个 Web 服务客户端来连接到服务。我按照以下步骤使用证书身份验证创建并连接到服务 从

回答 1 投票 0

URL 无法连接的卷曲问题

所以我不是一个很好的网络人,所以我希望有人能给我指出正确的方向,以找出我做错了什么。 我正在尝试使用curl 来发布SOAP 消息。 我跑了...

回答 3 投票 0

使用 Angular 通过 HTTP 发送 SOAP 请求?

我正在使用简单的 HTML、CSS 和 Angular 开始一个新的 Web 应用程序项目。我们正在使用现有的 Web 服务从某些服务器检索数据,我们尝试使用的一项服务是公共服务...

回答 2 投票 0

带有大消息的 JAX-WS SoapHandler:OutOfMemoryError

使用 JAX-WS 2,我看到其他人也谈到过的一个问题。问题是,如果在处理程序内接收到 SOAP 消息,并且该 SOAP 消息很大 - 是否由于内联 SOAP ...

回答 5 投票 0

如何调试SoapHttpClientProtocol

我试图通过 Visual Studio 生成的一些代理代码(基于服务中的 WSDL)调用外部 Web 服务。我返回的结果对象为空,尽管我可以看到

回答 1 投票 0

使用 gradle、框架 Micronaut、技术 kotlin 创建 SOAP Web 服务

第一次使用Micronaut(gradle)构建SOAP服务,网上查到的资料不是太多。所有路径都引导我到这些库: 实施(“com.sun...

回答 1 投票 0

如何使用 Java 从 SOAP 响应中检索元素值?

我正在尝试从以下来自 salesforce 的字符串响应中获取标签值, 我正在尝试从以下来自 salesforce 的字符串响应中获取标签值, <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://soap.sforce.com/2006/04/metadata"> <soapenv:Body> <listMetadataResponse> <result> <createdById>00528000001m5RRAAY</createdById> <createdByName>Hariprasath Thanarajah</createdByName> <createdDate>1970-01-01T00:00:00.000Z</createdDate> <fileName>objects/EmailMessage.object</fileName> <fullName>EmailMessage</fullName> <id /> <lastModifiedById>00528000001m5RRAAY</lastModifiedById> <lastModifiedByName>Hariprasath Thanarajah</lastModifiedByName> <lastModifiedDate>1970-01-01T00:00:00.000Z</lastModifiedDate> <namespacePrefix /> <type>CustomObject</type> </result> </listMetadataResponse> </soapenv:Body> </soapenv:Envelope> 上面我们有标签<fullName>。我需要获取标签内的值并将其放入字符串数组中。我尝试过使用 substring 方法,但它只返回一个值。有人可以建议我这样做吗? 我已经尝试过如下, public static Document loadXMLString(String response) throws Exception { DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(new StringReader(response)); return db.parse(is); } public static List<String> getFullNameFromXml(String response, String tagName) throws Exception { Document xmlDoc = loadXMLString(response); NodeList nodeList = xmlDoc.getElementsByTagName(tagName); List<String> ids = new ArrayList<String>(nodeList.getLength()); for(int i=0;i<nodeList.getLength(); i++) { Node x = nodeList.item(i); ids.add(x.getFirstChild().getNodeValue()); System.out.println(nodeList.item(i).getFirstChild().getNodeValue()); } return ids; } 从上面的代码中,您将获得 ids 列表。之后,您可以将它们放入字符串数组并将它们返回到字符串数组,如下所示, List<String> output = getFullNameFromXml(response, "fullName"); String[] strarray = new String[output.size()]; output.toArray(strarray); System.out.print("Response Array is "+Arrays.toString(strarray)); 使用以下代码解析 SOAP 响应并获取元素值。 将 XML 响应保存在系统上的任何位置。调用方法 getResult()。它是一个通用方法。它采用 Web 服务响应的有效负载类类型并返回 java 对象。 private static String readXMLFile(String fileName) { File xmlFile = new File("response file path from step 1"); Reader fileReader = new FileReader(xmlFile); BufferedReader bufReader = new BufferedReader(fileReader); StringBuilder sb = new StringBuilder(); String line = bufReader.readLine(); while (line != null) { sb.append(line).append("\n"); line = bufReader.readLine(); } String xml2String = sb.toString(); bufReader.close(); } public <T> T getResult(String xml, String path, Class<T> type) { final Node soapBody = getSoapBody(xml, path); return getInstance(soapBody, type); } private Node getSoapBody(String xml, String path) { try { SOAPMessage message = getSoapMessage(xml, path); Node firstElement = getFirstElement(message); return firstElement; } catch (Exception e) { throw new RuntimeException(e); } } private SOAPMessage getSoapMessage(String xml, String path) throws SOAPException, IOException { MessageFactory factory = MessageFactory.newInstance(); FileInputStream fis = new FileInputStream(path); BufferedInputStream inputStream = new BufferedInputStream(fis); return factory.createMessage(new MimeHeaders(), inputStream); } private Node getFirstElement(SOAPMessage message) throws SOAPException { final NodeList childNodes = message.getSOAPBody().getChildNodes(); Node firstElement = null; for (int i = 0; i < childNodes.getLength(); i++) { if (childNodes.item(i) instanceof Element) { firstElement = childNodes.item(i); break; } } return firstElement; } private <T> T getInstance(Node body, Class<T> type) { try { JAXBContext jc = JAXBContext.newInstance(type); Unmarshaller u = jc.createUnmarshaller(); return (T) u.unmarshal(body); } catch (JAXBException e) { throw new RuntimeException(e); } } 如果您只想解析这个单个元素,您可以使用 SAX 或 StAX 解析器,如此处所述 https://www.javacodegeeks.com/2013/05/parsing-xml-using-dom-sax-and-stax- parser-in-java.html. SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean fullName = false; public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException { System.out.println("Start Element :" + qName); if (qName.equals("fullName")) { fullName = true; } } public void characters(char ch[], int start, int length) throws SAXException { if (fullName ) { System.out.println("Full Name : " + new String(ch, start, length)); fullName = false; } } } saxParser.parse(mySoapResponse, handler); 或者您可能想阅读有关 JAX-WS API 的更多信息,以创建 SOAP 客户端以使用 Salesforce Web 服务。

回答 3 投票 0

SOAP Office.js EWS ReplyView getAttachments

我想生成一个 SOAP 请求来下载我正在回复的电子邮件的附件(所以我在 MessageComposeCommandSurface 中,而不是在 MessageReadCommandSurface 中,我知道会有一个 AP...

回答 1 投票 0

如何正确生成值来签署 SOAP 信封

我正在使用 xmlsec1 工具和 XML 数字签名 (XMLDSIG) 标准对 SOAP 信封进行签名。这是我正在使用的未签名的 SOAP 信封。 我正在使用 xmlsec1 工具和 XML 数字签名 (XMLDSIG) 标准对 SOAP 信封进行签名。这是我正在使用的未签名 SOAP 信封。 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue /> </Reference> </SignedInfo> <SignatureValue /> <KeyInfo> <X509Data /> </KeyInfo> </Signature> <soapenv:Body>This is the body of the SOAP envelope</soapenv:Body> </soapenv:Envelope> 我使用以下 xmlsec1 命令生成了签名信封。 xmlsec1 --sign --privkey-pem private_key.pem --output signed_test.xml test.xml 生成的签名信封如下 <?xml version="1.0"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <Reference> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>mT/qq9iX2rvTrWOPfE8thFOKdbA=</DigestValue> </Reference> </SignedInfo> <SignatureValue>eZFngILLORe+r/07FupC9YPJEB3n3qhTyEi0+3J7Ivv/20rm7YNU5CllAiUmLUDJ 0A9/YLDo2BOokrNmAkpWtxU1xs83FH3NDecfqEj1hgIXsbkMhJLh2szssR6nRoff ZV8FqWjQgUGS/IKLY0R9S/pxMxROKkiJ0J71hFHvuFphN/ZtpOGXdmX7oaS6EZmT BeSu8R2jGiMVbGyf4+EBxkpSN6VF4tn3MWgfP+MV7ICw3MHHgNVd7Nqy7vS+kOtZ hq2Tndg4b7O79XW2ni5tmpKJzHPDBfWFS+fEXHqkOFcPnb1rCk3oTOcaCqHOVZ1m BbiB7r2bxyrKDL7uIA4suw==</SignatureValue> <KeyInfo> <X509Data/> </KeyInfo> </Signature> <soapenv:Body>This is the body of the SOAP envelope</soapenv:Body> </soapenv:Envelope> 我试图理解 和 是如何计算的。根据 SOAP 信封,我知道的是: DigestValue 使用 SHA-1 算法,如元素中所指定。 SignatureValue 使用 RSA-SHA1 算法生成,如元素中所指定。 当我使用 <soap:Body> 算法对 sha1 进行哈希处理时,我得到了不同的值。如果有人可以展示正确生成这些值的详细步骤,我们将不胜感激。 我在这个 github 存储库中检查了 xmlsec 的代码:https://github.com/lsh123/xmlsec我认为这是正确的。 我对C和密码学的了解很差,所以我无法直接向你解释。 但是通过在整个项目中搜索“SignatureValue”,我在第805行找到了这个文件https://github.com/lsh123/xmlsec/blob/master/src/gcrypt/signatures.c#L805,其中解释 SignatureValue 基于 DSA-SHA1 的评论,这里是: DSA-SHA1 signature transform http://www.w3.org/TR/xmldsig-core/#sec-SignatureAlg: The output of the DSA algorithm consists of a pair of integers usually referred by the pair (r, s). The signature value consists of the base64 encoding of the concatenation of two octet-streams that respectively result from the octet-encoding of the values r and s in that order. Integer to octet-stream conversion must be done according to the I2OSP operation defined in the RFC 2437 [PKCS1] specification with a l parameter equal to 20. For example, the SignatureValue element for a DSA signature (r, s) with values specified in hexadecimal: r = 8BAC1AB6 6410435C B7181F95 B16AB97C 92B341C0 s = 41E2345F 1F56DF24 58F426D1 55B4BA2D B6DCD8C8 from the example in Appendix 5 of the DSS standard would be <SignatureValue>i6watmQQQ1y3GB+VsWq5fJKzQcBB4jRfH1bfJFj0JtFVtLotttzYyA==</SignatureValue> 希望它可以帮助您找到您想要的东西。

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.