简单对象访问协议(SOAP)是用于在Web服务的实现中交换结构化信息的协议规范。
我必须创建一个 Web 服务来从第三方公司检索信息。他们有一个 soap xml 的示例,我已经能够让它匹配,除了 heade...
Quarkus 上的 Apache Camel - CXF SOAP - 本地主机问题:8080
我正在使用 Quarkus Apache Camel。我想使用 camel-quarkus-cxf-soap。我试过这个: https://code.quarkus.io/?e=org.apache.camel.quarkus%3Acamel-quarkus-cxf-soap&extension-search=camel-quarkus-...
我正在尝试创建一个将由另一家公司使用的 SOAP Web 服务。该公司希望以某种方式提供数据,因此我创建了一个 WSDL 来反映这一点。 我不需要
使用 SOAP 信封和无效的 xsd 地址反序列化 XML 文件
我想反序列化这种具有 SOAP 信封和标头中不再存在的无效 .xsd 地址的 XML 文件(finvoiceack.xsd)。想要将节点获取到数据集或我...
如何访问Openlink-Virtuoso“{Default SSL Web Site}”? [关闭]
这个问题是关于Openlink-Virtuoso软件部署的。 Virtuoso 无需开箱即用的 SSL 证书。 它也适用于通过 Web 界面为新的侦听器和页面创建的新 ssl 密钥/证书...
如何访问Openlink-Virtuoso“{默认SSL网站}”?
我正在尝试访问 Virtuoso“{默认 SSL 网站}”页面。 (测试服务器ip为“”,无dns记录,新鲜的VOS Virtuoso:07.20.3236) 我已经尝试过的:...
如何从 Soap 消息请求中获取 Integer 类的空对象?
肥皂对我来说是一项新技术。我收到一个 Soap 消息请求,这是其中的一部分 ...
将多个 JSON 值分配给从空手道上的数据库调用返回的 XML 文件
对于测试项目,我正在调用数据库,并获取我将在我的 xml 文件中设置的必要字段以进行 SOAP 服务调用。 据我所知,数据库调用返回为 J...
Spring 在最新版本的 Spring Web 服务 JAR 中删除了 AxiomSoapMessageFactory。我们现有的应用程序使用以前版本的 Spring WS。请让我知道我有什么选择...
我刚刚有一个关于 svcutil 从 WSDL 生成的 WCF 客户端与使用具有正确参数的 HttpClient 进行调用的一般性问题。我什至不知道 WCF 的存在,直到最近
我正在尝试构建一个带有适当信封然后正文的 SOAP 消息,但我无法获得它。下面是我为构建它而编写的代码行。 ...
SOAP 不使用 simplexml_load_String 提取子节点
我正在尝试获取 SOAP 数组/对象,但出现错误,我也尝试了名称空间。 但以下是在其他 XML 响应中对我有用的代码,在此处不起作用。 请指导我的错误...
javax.xml.ws.handler over Spring Webflux中的Trace信息
我有一个 Spring Webflux 微服务,它没有将 traceId 和 spanId 放在特定的日志跟踪中。我的应用程序使用 SOAPHandler 来记录 SOAP 请求/响应。在这个痕迹中, spanId 和 traceI ...
在 WSO2 api 管理器 4.1.0 中更改生成 REST API 的 URI 模式形成 SAOP 方法
我正在使用 WSO2 API Manager 4.1.0,我需要更改从 SAOP 端点生成的 REST API 的方法的 URI 模式(rest 服务在 rest 端点上没有问题)。 例如...
如何将一个或多个 Confluence 数据中心/服务器空间导出为 PDF?
如何根据对所有可用空间的搜索将一个或多个 Confluence 空间导出为 PDF? 信息稀缺,所以我将此作为问答来帮助他人。 我已经阅读了 API 的迷宫
Spring boot - 通过 HTTPS 使用 SOAP Web 服务
我使用 Spring 引导教程 https://spring.io/guides/gs/consuming-web-service/ 构建了一个简单的 SOAP Web 服务客户端。它工作完美。 如果我想切换到 HTTPS,麻烦就开始了
我正在使用 Zeep 访问 Web 服务。从web服务的wsdl来看,有多个函数/操作。他们都将“字符串”作为输入。我能够访问并获得
在 .Net6 中找不到 Soap CustomBinding
我有旧的遗留 Standard2.1 项目,带有带有 CustomBinding 的 Soap 服务,我尝试将它升级到 .Net6。在构建时我收到以下错误 //引用类型'IBindingRuntimePreferences'声明我...
XML 不能用 soap-env 解析,在 PHP 中有自定义标签
我在用 PHP 解析 XML 响应时遇到错误 当我从 CURL 请求调用时,我有以下 XML 响应 我在用 PHP 解析 XML 响应时遇到错误 当我从 CURL 请求调用时,我有以下 XML 响应 <soap-env:Header> <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustUnderstand="1"> <eb:From> <eb:PartyId eb:type="URI">Sabre_API</eb:PartyId> </eb:From> <eb:To> <eb:PartyId eb:type="URI">Agency</eb:PartyId> </eb:To> <eb:ConversationId>2021.01.DevStudio</eb:ConversationId> <eb:Service eb:type="sabreXML">Session</eb:Service> <eb:Action>TokenCreateRS</eb:Action> <eb:MessageData> <eb:MessageId>1913771794839350290</eb:MessageId> <eb:Timestamp>2023-02-23T22:04:43</eb:Timestamp> </eb:MessageData> </eb:MessageHeader> <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">T1RLAQLASo74A7olKG7QnepeFqs19UHX+0Cds9QiDZoYfu677xC3Vkr9a+OcQhutjPL4atVMAADQRtHIXdehGg/0OVuPdia/0cM233jFDvyJJHgJHC3o8gV2ssS63b4Y0lgCG59SiG4tmEcqAXcYAMlnq+wJ4TfsOIDFwYdP+D0peSEFBM/m3EyOUqc4idJ+vO4S7xENCeQ7UX4YVKjVLJs788omPDbSIRNo85KQ5QxRprldV0jucJpAtbNfs1DrMHFqNIPyg0CpVpgXILkFx0azkcAuvmbHMHLqqO13WJEOhsG0KDBhBhRn8CwoCgD9foXL24W6yGu8Ecm0Fzvb/MuAjuYm9s48yg**</wsse:BinarySecurityToken> </wsse:Security> </soap-env:Header> <soap-env:Body> <sws:TokenCreateRS xmlns:sws="http://webservices.sabre.com" Version="1.0.0"> <sws:Success/> </sws:TokenCreateRS> </soap-env:Body> </soap-env:Envelope> 为了解析上面的 XML,我最初尝试使用 simplexml_load_String 但它给出了一个空响应。 然后我使用以下代码尝试了DOM方法,这里考虑$response->Data是上面的XML。 $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($response->Data); $dom->formatOutput = true; $XMLContent = $dom->saveXML(); 它再次给我以下输出: <!--?xml version="1.0" encoding="UTF-8"?--> <soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:header> <eb:messageheader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustunderstand="1"> <eb:from> <eb:partyid eb:type="URI">Sabre_API</eb:partyid> </eb:from> <eb:to> <eb:partyid eb:type="URI">Agency</eb:partyid> </eb:to> <eb:conversationid>2021.01.DevStudio</eb:conversationid> <eb:service eb:type="sabreXML">Session</eb:service> <eb:action>TokenCreateRS</eb:action> <eb:messagedata> <eb:messageid>1002038859236010450</eb:messageid> <eb:timestamp>2023-02-23T23:52:03</eb:timestamp> </eb:messagedata> </eb:messageheader> <wsse:security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsse:binarysecuritytoken valuetype="String" encodingtype="wsse:Base64Binary">T1RLAQJZqih4+TYQmYCcdj42lcej5nckNWdo6WNb8edNl3xNtxAkqmu2YKjKki1OKQ7B3HK3AADQCGiRWrlzFPM0KB4foAOsSF+I+5eXE32uQ23LLd+hOduY2BCJYqPw7CvwCJ/LfNjy3P+QyvClvu6ysctC3a0GjmixDPDqCIckcXPb+XDFyYhR5G5QzQjch/Eax25koLnNvfN8rlvjNq+ENJmaV17wP43GLo1pzd19d9HGMn1VgjrJiVGWAb1ezyeiFNAd1VuBD2lAmdlo4jvZJzAS/fklZvwNFbKME64YpaFRptoLz0FKmz47y1TVYFtV6TZxbKirP3PDms0aGlItbJ4apPSB2Q**</wsse:binarysecuritytoken> </wsse:security> </soap-env:header> <soap-env:body> <sws:tokencreaters xmlns:sws="http://webservices.sabre.com" version="1.0.0"> <sws:success> </sws:success></sws:tokencreaters> </soap-env:body> </soap-env:envelope> 所以我计划从NODE获取数据,如下所示 $XMLContent->getElementsByTagName('soap-env:header')->item(0)->nodeValue); 但是它没有给我一个节点值,而是开始给我和错误。 我只想获取节点中的数据wsse:binarysecuritytoken 有没有人经历过这样的事情? 你能帮我吗?? 更新 也尝试关注,但仍然没有帮助 $domDocument = new DOMDocument(); $domDocument->loadXML($XMLContent); $carriers=array(); $results=$domDocument->getElementsByTagName("wsse:Security"); foreach($results as $result) { foreach($result->childNodes as $node) { if($node instanceof DOMElement) { array_push($carriers, $node->textContent); } } } var_dump($carriers); 好吧,在花了几个小时之后,我终于明白了! 我不得不根据如下标签名称进行修改,在大多数情况下,我不得不使用 soap-env 而不是 SOAP. $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($response->Data); $dom->formatOutput = true; $XMLContent = $dom->saveXML(); $xml = simplexml_load_String($XMLContent, null, null, 'soap-env', true); if(!$xml) trigger_error("Encoding Error!", E_USER_ERROR); $Results = $xml->children('soap-env',true); foreach($Results->children('soap-env',true) as $fault){ if(strcmp($fault->getName(),'Fault') == 0){ trigger_error("Error occurred request/response processing!", E_USER_ERROR); } } foreach($Results->children('wsse',true) as $nodes){ if(strcmp($nodes->getName(),'Security') == 0){ foreach($nodes->children('wsse',true) as $securityNodes){ if(strcmp($securityNodes->getName(),'BinarySecurityToken') == 0){ $tokenParsed = (string)$securityNodes; } } } } 这就是SOAP,一种使用XML语法的对象序列化格式。最佳解决方案是使用 SOAP 库。 PHP 对此有ext/soap。使用 XML 库会低一个级别。 XML 使用命名空间。名称空间是使用唯一的 URI 指定的。为了可读性/可维护性,XML 为 URI 定义了别名,并将它们用作节点名称的前缀。但是以下3个例子都应该读作{http://schemas.xmlsoap.org/soap/envelope/}envelope: <soap-env:envelope xmlns::soap-env="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/> <envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/> 命名空间可以在任何元素节点上定义,因此它们甚至可以在单个文档中更改。这意味着您的代码不应该依赖于文档中的别名/前缀,而是名称空间 URI。 我强烈建议为使用的命名空间定义一个数组变量/常量。然后你可以使用 Xpath 和命名空间感知 DOM 方法(后缀NS)。 // used namespaces, the keys do NOT need to match the prefixes in the XML. $xmlns = [ 'soap' => 'http://schemas.xmlsoap.org/soap/envelope/', 'eb' => 'http://www.ebxml.org/namespaces/messageHeader', 'sec' => 'http://schemas.xmlsoap.org/ws/2002/12/secext' ]; $document = new DOMDocument(); $document->loadXML(getSoapXmlString()); $xpath = new DOMXpath($document); // register your aliases for the namespaces foreach ($xmlns as $alias => $uri) { $xpath->registerNamespace($alias, $uri); } $token = $xpath->evaluate( 'string(//sec:security/sec:binarysecuritytoken)' ); var_dump($token); DOMXpath::evaluate() 允许 Xpath 表达式返回节点列表和标量值。如果将节点列表(由位置路径指定)转换为字符串,它将返回第一个节点的文本内容或空字符串。
我正在尝试从需要 Keystore 中的数字证书 (JKS) 的服务器获取数据以授权 soap 请求,除此之外,它还需要 WSS 传出的基本授权