php native,忽略soapvar中的命名空间

时间:2017-12-22 08:36:00

标签: php web-services soap

我最近使用php native soap创建了一个php webservice。 我已经创建了wsdl,xsd和php代码来构建响应。

在我的soapvar中,当我使用命名空间前缀构造soap arrayObject时,有些节点有它,有些节点没有。 我想要的是所有节点都有" ns1:"前缀或者都不是。

为了克服这个问题,我从soapvar中删除了命名空间。所以这删除了ns前缀但是我总是收到来自我的wsdl" retrieveDataResponse "的消息。节点与" ns1:"前缀和我没有构建的所有其余部分。 在我的php中,我在每个节点中运行嵌套的foreach,并且添加了#34; XSD_STRING"或" SOAP_ENC_OBJECT"取决于enc_type。

我在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>
                              <PrefferedCommunicationMethod>SMS</PrefferedCommunicationMethod>
                              <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>

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

1 个答案:

答案 0 :(得分:0)

我发现了问题。

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

所以soapvar没有进入名称空间:)