简单对象访问协议(SOAP)是用于在Web服务的实现中交换结构化信息的协议规范。
所以我不是一个很好的网络人,所以我希望有人能给我指出正确的方向,以找出我做错了什么。 我正在尝试使用curl 来发布SOAP 消息。 我跑了...
使用 Angular 通过 HTTP 发送 SOAP 请求?
我正在使用简单的 HTML、CSS 和 Angular 开始一个新的 Web 应用程序项目。我们正在使用现有的 Web 服务从某些服务器检索数据,我们尝试使用的一项服务是公共服务...
带有大消息的 JAX-WS SoapHandler:OutOfMemoryError
使用 JAX-WS 2,我看到其他人也谈到过的一个问题。问题是,如果在处理程序内接收到 SOAP 消息,并且该 SOAP 消息很大 - 是否由于内联 SOAP ...
我试图通过 Visual Studio 生成的一些代理代码(基于服务中的 WSDL)调用外部 Web 服务。我返回的结果对象为空,尽管我可以看到
使用 gradle、框架 Micronaut、技术 kotlin 创建 SOAP Web 服务
第一次使用Micronaut(gradle)构建SOAP服务,网上查到的资料不是太多。所有路径都引导我到这些库: 实施(“com.sun...
我正在尝试从以下来自 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 服务。
SOAP Office.js EWS ReplyView getAttachments
我想生成一个 SOAP 请求来下载我正在回复的电子邮件的附件(所以我在 MessageComposeCommandSurface 中,而不是在 MessageReadCommandSurface 中,我知道会有一个 AP...
我正在使用 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> 希望它可以帮助您找到您想要的东西。
Perl SOAP::WSDL 访问 HTTPS 未经授权错误
我正在尝试生成一个 Perl 库来连接到 Web 服务。该网络服务位于 HTTPS 服务器中,我的用户可以访问它。 我已经多次执行 wsdl2perl.pl,使用不同的选项...
当 SOAPAction HTTP 标头为空字符串时,jaxws-ri 如何将 SOAP 请求路由到正确的方法?
我在 Tomcat 上使用 jaxws-ri,版本 2.3.2 我有带有一些 JAX-WS 注释的简单类: @WebService() 公开课测试{ @WebMethod() 公共字符串validateCard(字符串id){
使用 spring-ws 验证 SOAP 服务中的请求签名和签名响应
前提:我需要创建一个使用 WS-Security 标准的 SOAP 服务来执行标题中描述的操作,以便 SOAP 客户端可以使用该服务。 我有什么 肥皂服务已完成
我正在尝试向巴西政府端点发出肥皂请求,但遇到了一些麻烦。 他们提供以下 wsdl:https://mdfe-homologacao.svrs.rs.gov.br/ws/MDFeRecepcaoSinc/
如何在 Spring Web 服务中为 SOAP 故障元素设置自定义命名空间前缀?
我正在开发一个 Spring Web Services 项目,我需要自定义 SOAP 错误响应。具体来说,我想确保 SOAP 响应中的错误元素使用自定义命名空间 p...
我尝试向 ONVIF 摄像机发送 SetHostName 请求,但无法正确发出请求,并且总是收到错误。 请帮我。 ''' 我尝试向 ONVIF 摄像机发送 SetHostName 请求,但无法正确发出请求,并且总是收到错误消息。 请帮助我。 ''' <?xml version='1.0' encoding='utf-8' ?> <soap-env:Envelope xmlns:soap-env="http://www.w3.org/2003/05/soap-envelope"> <soap-env:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <wsse:UsernameToken> <wsse:Username> admin </wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"> gfdsgfsgfsgfs </wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"> fdsgfdsgfsdfgsd </wsse:Nonce> <wsu:Created xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 2024-01-17T14:03:35+00:00 </wsu:Created> </wsse:UsernameToken> </wsse:Security> </soap-env:Header> <soap-env:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tds:SetHostname xmlns="http://www.onvif.org/ver10/device/wsdl"> <tds:HostnameInformation> <tt:Name>NewHostname1234</tt:Name> </tds:HostnameInformation> </tds:SetHostname> </soap-env:Body> </soap-env:Envelope>''' 我看到有几个人还在关注这个帖子。以下是我如何使用curl 检索主机名。当然,更改您设备的 IP 和端口。它必须是一根连续的字符串才能工作。 curl http://192.168.1.40:8899/onvif/device_service --data '' --header '内容类型:application/soap+xml;字符集=utf-8;行动=“http://www.onvif.org/ver10/device/wsdl/GetHostname”;'
我使用本指南创建了一个简单的 spring-boot SOAP Web 服务: https://spring.io/guides/gs/having-web-service/ 我将其部署到云服务,但会有一个 API 管理层...
IBM 大型机采用 IBM-37 图表集编码格式为 UTF-8,以便在 springboot 应用程序中理解
嗨,你好吗?我正在尝试转换 xml raw 消息来自 IBM 大型机,采用 IBM-37 图表集编码格式为 UTF-8,以便在 springboot 应用程序中理解。 知道该怎么做吗?我是...
PowerShell New-WebServiceProxy 无法获取所有方法
我正在编写一个 PS 脚本来检查 Windows 服务的状态,并希望在某些情况下调用特定的 Web 服务方法: $wsdl =“https://webservice-page/wsdl.php?user” $webserviceU...
ASP.NET Core - 反序列化城市 API XML 响应不起作用
调用城市 API 时,它以 XML 格式返回此响应。我想将此 XML 反序列化为一个对象。反序列化抓取对象,直到 diffgram 内部 diffgram 我们有 NewDataSet pr...
城市 API XML 响应 XmlDeserialization 不起作用,ASP.NET Core
调用城市 API 时,它会以 XML 格式返回此响应。我想将此 XML 反序列化为 C# 对象。反序列化抓取对象直到 diffgram 在 diffgram 中我们有 NewDataSet 属性
我想获取数据并将其发布到netsuite。我在Google上探索过,但我只了解PhpToolKit和SuiteScript。我想在 NetSuite 中创建一些自定义模块并从 netsuite 获取数据