2015-06-19 6 views
0

Я столкнулся с проблемой дублирования пространства имен в ответе xml моего веб-сервиса. У меня есть responder.xsd, который использует customer.xsd и common.xsd Мой ответ xml структурирован с использованием элементов в этих двух xsds. Образец ответа XML-, как показано ниже:namespace duplicate issue in xml

... 
<ns:RoleType></ns:RoleType> 
<ns:Addresses> 
    <ns:PostalInfo> 
    <comm:AddressLine></comm:AddressLine> 
    <comm:City></comm:City> 
    </ns:PostalInfo> 
</ns:Addresses> 
<ns:ValidFlag></ns:ValidFlag> 
... 

, где нс: это пространство имен клиентов и Прдч: это общее пространство имен.

Но ответ, который я получаю, как показано ниже

... 
<ns1:RoleType xmlns:ns1="urn:Customer:domain:5"></ns1:RoleType> 
<ns2:Addresses xmlns:ns2="urn:Customer:domain:5"> 
    <ns2:PostalInfo> 
    <ns3:AddrLine xmlns:ns3="urn:Common:domain:5"></ns3:AddrLine> 
    <ns4:City xmlns:ns4="urn:Common:domain:5"></ns4:City> 
    </ns2:PostalInfo> 
</ns2:Addresses> 
<ns5:ValidFlag xmlns:ns3="urn:Customer:domain:5></ns5:ValidFlag> 
... 

Может кто-то помочь мне понять, почему же пространство имен дублируют с возрастающими номерами, как ns1, ns2 и comm1, Comm2 и т.д.? Как я могу это исправить?

Обновлено: Фрагмент кода, который хорошо сформирован и с корневым элементом.

<GetHCPResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:services:ServiceResponder:5" xsi:schemaLocation="urn:services:ServiceResponder:5 C:\Users\vijay\Desktop\wsdl\wsdl\Service_5_2\ServiceResponder.xsd"> 
     <StatusCode>0</StatusCode> 
     <StatusMessage>Success</StatusMessage> 
     <HCP> 
      <ns1:ID xmlns:ns1="urn:Customer:domain:5">29199486</ns1:ID> 
      <ns2:CustomerClass xmlns:ns2="urn:Customer:domain:5">HCP</ns2:CustomerClass> 
      <ns3:CustomerStatus xmlns:ns3="urn:Customer:domain:5">A</ns3:CustomerStatus> 
      <ns4:RoleType xmlns:ns4="urn:Customer:domain:5">P</ns4:RoleType> 
      <ns5:Addresses xmlns:ns5="urn:Customer:domain:5"> 
       <ns5:PostalContact> 
        <ns5:MasterAddressID>15863814</ns5:MasterAddressID> 
        <ns5:PostalInfo> 
         <ns6:AddressLine LineNo="1" xmlns:ns6="urn:CommonTypes:domain:5">8252 NW 25TH ST</ns6:AddressLine> 
         <ns7:City xmlns:ns7="urn:CommonTypes:domain:5">DORAL</ns7:City> 

...

Спасибо, Vijay

+0

Какая структура веб-сервиса вы используете? – Mecon

+0

Его веб-служба Java – Vijay

+0

Является ли реальный ответ хорошо сформированным? В частности, имеет ли он один корневой элемент? (То, что вы показываете, не имеет единого корня и поэтому недостаточно хорошо сформировано.) Как я указываю в [моем ответе ниже] (http://stackoverflow.com/a/30945762/290085), сами префиксы пространства имен незначительны; это имеет значение URI пространства имен. Вы указываете, что вам интересно, почему это происходит, но, не показывая нам код, генерирующий эти ответы, вероятно, недостаточно информации для ответа. – kjhughes

ответ

0

пространств имен префиксов дело только потому, что пространства имен URI, к которым они связаны. Фактическое значение префикса пространства имен в противном случае несущественно.

+0

Привет, Спасибо за ваш ответ. Но проблема в том, что мы используем datapower для экстернализации веб-сервиса, а Datapower имеет предел уникальных пространств имен, которые он может разрешить. Предел в основном находится в пределах 10000. Таким образом, для некоторых ответов, которые имеют несколько элементов Address, уникальное пространство имен становится более 10000. ex: ns: 12252 – Vijay

+0

Помогло бы это, если бы простое преобразование XSLT могло объединить излишние объявления префикса пространства имен? – kjhughes

+0

Да, это поможет. Но я хотел бы знать, что вызывает эти чрезмерные объявления пространства имен. Я попытался создать образец Response XML с использованием Altova XMLSPY, и ответ получился отлично. Он имеет только ns: и comm: пространства имен и без излишних объявлений. Интересно, что заставляет вебсервис самостоятельно отправлять ответ с тысячами дублированных пространств имен. – Vijay

0

Кажется, что вы потребляете сторонний веб-сервис, и вы не хотите модифицировать xsds и wsdls, правильно?

Но, как вы сказали, это одно и то же пространство имен ... вы пытались вручную обновить xsd и wsdl, чтобы объединить пространства имен?

+0

Я не использую веб-сервис третьей части. мы создаем web-сервис на основе перечисленных мной схем, а XML-код - это ответ webservice – Vijay