繁体   English   中英

PHP本机,忽略soapvar中的名称空间

[英]PHP native, ignores namespace in soapvar

我最近使用php native soap创建了一个php Web服务。 我创建了wsdl,xsd和php代码来构造响应。

在我的soapvar中,当我使用名称空间前缀构造soap arrayObject时,有些节点有它,有些则没有。

我想要的是所有节点都带有“ ns1:”前缀,或者没有一个。

为了解决该问题,我从soapvar中删除了名称空间。 因此,这删除了ns前缀,但是我总是从wsdl的“ retrieveDataResponse”节点中得到带有“ ns1:”前缀的消息,而我所构造的其余所有消息都没有。

在我的PHP中,我在每个节点中嵌套了foreach运行,并且子级根据enc_type添加了“ XSD_STRING”或“ SOAP_ENC_OBJECT”。

我在foreach中的php中的soapvar是:

$dataStruct[] = new SoapVar($ListOfDataStruct, SOAP_ENC_OBJECT, null, null, 'ListOfData', 'http://localhost/soap/retrieveCstData');

我的XML回应是

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/soap/retrieveCstData">
   <SOAP-ENV:Body>
      <ns1:retrieveDataResponse>
         <ns1:cstData>
            <ns1:Description>Discription N/A</ns1:Description>
            <ns1:ListOfData>
               <ns1:Customer-Data-Header>
                  <ns1:AssetDescription>Basic 12 Months</ns1:AssetDescription>
                  <ns1:AssetId>1-3QGMHQ9</ns1:AssetId>
                  <ns1:ProductDescription>Basic 12 Months</ns1:ProductDescription>
                  <ns1:ProductId>1-2E543A</ns1:ProductId>
                  <ns1:ProductName>Basic Product Subscription</ns1:ProductName>
                  <ns1:ListOfCstData-Asset>
                     <ns1:CstData-Asset>
                        <AssetIntegrationId>1-3Q3KSNI</AssetIntegrationId>
                        <ProductName>Basic Product Subscription</ProductName>
                        <ProductPartNumber>SAT0028</ProductPartNumber>
                        <StartDate>08/19/2015 21:00:00</StartDate>
                        <Status>Active</Status>
                        <ListOfProductXA/>
                        <ListOfAddress/>
                        <ListOfContact/>
                     </ns1:CstData-Asset>
                  </ns1:ListOfCstData-Asset>
               </ns1:Customer-Data-Header>
               <ns1:Customer-Data-Header>
                  <ns1:AssetId>1-7MRO-241</ns1:AssetId>
                  <ns1:ProductDescription>SubProduct A</ns1:ProductDescription>
                  <ns1:ProductId>1-65TVM</ns1:ProductId>
                  <ns1:ProductName>SubProduct A Type</ns1:ProductName>
                  <ns1:ProductType>Product</ns1:ProductType>
                  <ns1:ListOfCstData-Asset>
                     <ns1:CstData-Asset>
                        <AssetIntegrationId>1-5T126KG</AssetIntegrationId>
                        <ProductName>Asset-Product 1</ProductName>
                        <ProductPartNumber>N/A</ProductPartNumber>
                        <StartDate>08/16/2016 21:00:00</StartDate>
                        <Status>Active</Status>
                        <ListOfProductXA/>
                        <ListOfAddress/>
                        <ListOfContact/>
                     </ns1:CstData-Asset>
                     <ns1:CstData-Asset>
                        <AssetIntegrationId>W-C5PLG-11H-1</AssetIntegrationId>
                        <ProductName>SubProduct A Type</ProductName>
                        <ProductPartNumber>Data Packets</ProductPartNumber>
                        <RegisteredDate>02/21/1978</RegisteredDate>
                        <ServiceID>#56487%</ServiceID>
                        <StartDate>02/21/1978 00:00:00</StartDate>
                        <ListOfProductXA/>
                        <ListOfAddress>
                           <CutAddress>
                              <AddressType>Installation</AddressType>
                              <TEK>1651</TEK>
                              <Type>Old</Type>
                              <Country>US</Country>
                              <StreetNumberFrom>37</StreetNumberFrom>
                              <PostalCode>66857</PostalCode>
                              <State>CA</State>
                              <StreetName>
                                 <State>JAX Avenue</State>
                              </StreetName>
                           </CutAddress>
                        </ListOfAddress>
                        <ListOfContact>
                           <Contact>
                              <ActiveStatus>Y</ActiveStatus>
                              <IsPrimaryMVG>Y</IsPrimaryMVG>
                              <CellularPhone>555687676</CellularPhone>
                              <FirstName>Jhon</FirstName>
                              <LastName>Doe</LastName>
                              <PreferredCommunicationMethod>SMS</PreferredCommunicationMethod>
                              <ContactType>Technical</ContactType>
                           </Contact>
                        </ListOfContact>
                     </ns1:CstData-Asset>
                  </ns1:ListOfCstData-Asset>
               </ns1:Customer-Data-Header>
               <ns1:Customer-Data-Header>
                  <ns1:AssetDescription>Satelite 80CM</ns1:AssetDescription>
                  <ns1:AssetId>1-3QGMHX9</ns1:AssetId>
                  <ns1:ProductDescription>Satelite 80CM</ns1:ProductDescription>
                  <ns1:ProductId>1-2DIYLT</ns1:ProductId>
                  <ns1:ProductName>TV SAT</ns1:ProductName>
                  <ns1:ProductType>Product</ns1:ProductType>
                  <ns1:ListOfCstData-Asset>
                     <ns1:CstData-Asset>
                        <SubscriberId>664668941</SubscriberId>
                        <Comments>Suspension/Reactivation</Comments>
                        <AssetIntegrationId>1-3Q3KSNJ</AssetIntegrationId>
                        <ProductName>TV SAT</ProductName>
                        <ProductPartNumber>TV_SAT</ProductPartNumber>
                        <ServiceID>9995654321587</ServiceID>
                        <StartDate>08/19/2015 21:00:00</StartDate>
                        <Status>Active</Status>
                        <ListOfProductXA/>
                        <ListOfAddress>
                           <CutAddress>
                              <AddressType>Installation</AddressType>
                              <TEK>1651</TEK>
                              <Type>Old</Type>
                              <Area>CA</Area>
                              <Country>US</Country>
                              <StreetNumberFrom>37</StreetNumberFrom>
                              <ResidenceType>Business</ResidenceType>
                              <Floor>0</Floor>
                              <MailBox>US</MailBox>
                              <PostalCode>66857</PostalCode>
                              <State>CA</State>
                              <StreetName>JAX AVENUE</StreetName>
                              <District>DownTown</District>
                           </CutAddress>
                        </ListOfAddress>
                        <ListOfContact/>
                     </ns1:CstData-Asset>
                  </ns1:ListOfCstData-Asset>
               </ns1:Customer-Data-Header>
            </ns1:ListOfData>
         </ns1:retrieveDataResponse>
      </ns1:retrieveDataResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

因此,您可以看到前缀不在每个节点中。

好吧,我发现了问题。

在许多foreach循环之一中,我使用了先前声明的arrayObject而不是array键。

所以soapvar不会使用名称空间:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM