2009-11-18 8 views
1

다음 xml 조각의 차이점은 무엇입니까?xml 및 네임 스페이스 예외

내가 묻는 이유는 BPEL 프로세스에 XML을 제출할 때 첫 번째와 두 번째 작업이 수행되지만 마지막 작업은 수행되지 않는다는 것입니다.

<!-- imported namespace referenced with prefix --> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fxd="http://aaa.yy.zz/Foo"> 
    <soap:Body> 
     <fxd:GSR> 
      <aaa> 
       <a>1000000</a> 
       <c>UUU</c> 
       <cp>ZZ</cp> 
      </aaa> 
      <bbb> 
       <cc>CCC</cc> 
       <v>110005632501</v> 
      </bbb> 
      <adate>2009-11-04T07:14:44.5814828+02:00</adate> 
      <bdate>2009-11-04T07:14:44.5814828+02:00</bdate> 
      <m>NNNN</m> 
      <p>SSSS</p> 
      <r>LLLL</r> 
     </fxd:GSR> 
    </soap:Body> 
    </soap:Envelope>   

<!-- inline imported namespace referenced with a prefix--> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <fxd:GSR xmlns:fxd="http://aaa.yy.zz/Foo"> 
      <aaa> 
       <a>1000000</a> 
       <c>UUU</c> 
       <cp>ZZ</cp> 
      </aaa> 
      <bbb> 
       <cc>CCC</cc> 
       <v>110005632501</v> 
      </bbb> 
      <adate>2009-11-04T07:14:44.5814828+02:00</adate> 
      <bdate>2009-11-04T07:14:44.5814828+02:00</bdate> 
      <m>NNNN</m> 
      <p>SSSS</p> 
      <r>LLLL</r> 
     </fxd:GSR> 
    </soap:Body> 
</soap:Envelope> 


<!-- inline namespace --> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <soap:Body> 
      <GSR xmlns="http://aaa.yy.zz/Foo"> 
       <aaa> 
        <a>1000000</a> 
        <c>UUU</c> 
        <cp>ZZ</cp> 
       </aaa> 
       <bbb> 
        <cc>CCC</cc> 
        <v>110005632501</v> 
       </bbb> 
       <adate>2009-11-04T07:14:44.5814828+02:00</adate> 
       <bdate>2009-11-04T07:14:44.5814828+02:00</bdate> 
       <m>NNNN</m> 
       <p>SSSS</p> 
       <r>LLLL</r> 
      </GSR> 
     </soap:Body> 
</soap:Envelope> 

내 직관력은 동일한 wsdl 출신으로 생각할 때 xml과 동일하다고 말합니다. 그들은 성공적으로 파싱되지만 요소의 네임 스페이스는 그들이해야하는 것이 아닙니다.

+0

예, 모두 의미 상 동일해야합니다. 그들은 모두 다르게 해석합니까, 2는 동일하고 1은 다른가요? – skaffman

답변

2

다른 말할 것입니다. 즉, 예 1과 2는 동일하지만 3은 동일하지 않습니다.

<GSR>과 대비하여 <fxd:GSR>을 확인하십시오. 처음 접두사가 접두사임을 알 수 있습니다. 이제 네임 스페이스 xmlns:fxd=""을 정의하면이 네임 스페이스에 모두 똑같이 접두어가 붙은 요소가 설정됩니다. 다른 모든 요소 (접두사가 전혀없는 요소 포함)는 이며이 네임 스페이스에 없습니다.

그런 다음 세 번째 예에서는 고정되지 않은 모든 요소에 대한 네임 스페이스를 정의합니다. 이 GSR의 접두어가 아이들이 아니라 null 네임 스페이스 그들이 1과 2

편집하기 전에, 그들의 조상과 같은 네임 스페이스 갑자기 것을, 사실에 이르게 : 그냥 작은 설명 : 'FXD :'

xmlns:fxd="http://aaa.yy.zz/Foo" 

네임 스페이스에 "http://aaa.yy.zz/Foo"로 시작하는 모든 요소를 설정합니다.

xmlns="http://aaa.yy.zz/Foo" 

는 " http://aaa.yy.zz/Foo는" 그들의 이름 콜론이없는 모든 요소 (= 그들이 접두사되지 않음)하는 네임 스페이스를 설정합니다.

당신이 일을 원하는 경우에, 2

첫 번째 아무것도없는 요소가 발생하기 전에 단지 어딘가에

xmlns="http://aaa.yy.zz/Foo" 

를 추가, 3처럼 행동합니다. '줄'당신이 라운드 그것을 다른 방법을 원한다면, 당신은 당신이, 말과 네임 스페이스에 있어야 할 모든 요소를 ​​앞에해야하고이 곳 추가 널에서 그들을 설정 명시 적으로 이렇게

xmlns:bar="" 

을 네임 스페이스 (처음 두 예제에서와 같이).

+0

그래서 3에서와 같이 GSR 인라인의 네임 스페이스를 지정하는 것은 접두사를 통해 참조하는 것과 동일하지 않습니다.그리고 이것은 내가 해왔 던 테스트의 결과와 일치합니다. 동일한 wsdl에서 생성 된 것이기 때문에 이상 현상이 나타나는 이유는 무엇입니까? 구성 설정 등이 있습니까? 1 + 2는 Java (Jax-ws)이고 3은 .net 클라이언트입니다. –

+0

당신은 spec : http://www.w3.org/TR/xml-names/를 읽어야합니다. XML Namespaces는 약간 까다로울 수 있습니다. 그러나 스펙은 꽤 읽기 좋다 (스펙을 위해). 실제로 Java, .NET 또는 WSDL에 대한 경험이 없습니다. 나는 다른 컨텍스트 (주로 RDF와 XHTML + SVG)의 XML 네임 스페이스를 알고있다. 미안, 내가 너를 도울 수 없으면. – Boldewyn

+0

그건 그렇고, 원하는 결과는 1과 2 또는 3일까요? – Boldewyn

0

마지막 샘플에서 GSR 요소에 포함 된 모든 요소를 ​​fxd 네임 스페이스에 넣지 않습니까? 첫 번째 2 개 샘플에서 GSR 요소로 묶인 요소는 fxd 네임 스페이스에 없습니다.

그래서, 나는 그들이 하지 동일 마지막 샘플이 첫 번째 2