2012-07-11 2 views
1

JAXB를 사용하여 비누 요청을 마샬링하고 있습니다. 작동하지만 결과 XML에 soap:Envelope 태그가 없습니다. 또한 네임 스페이스는 soap:Envelope 태그 대신 루트 요소에 표시됩니다. 또한 xml 태그에 standalone 속성이 추가로 있습니다. JAXB의 마샬 러를 사용하여 아래의 두 번째 XML과 비슷한 출력을 어떻게 얻을 수 있습니까?JAXB를 사용하여 마샬링 할 때 비누 봉투 태그를 포함하는 방법은 무엇입니까?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
    <ns:name>Name</ns:name> 
    <ns:age>18</ns:age> 
</Customer> 

을 그리고 여기에 내가 그것을 같이하는 방법입니다 :

현재, 여기 내 정렬 화 된 XML처럼 보이는 방법 당신은 전송하기 전에 봉투 내부에 XML을 추가 할 수 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope 
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
    <soap:Body xmlns:ns="http://www.example.org/beanLevel1Namespace" xmlns:ns1="http://www.example.org/beanLevel2Namespace"> 
     <ns:Customer> 
      <ns1:id>201200001</ns:id> 
      <ns1:name>Name</ns:name> 
      <ns1:age>18</ns:age> 
     </ns:Customer> 
    </soap:Body> 
</soap:Envelope> 
+0

왜 XML에 봉투가 필요합니까? 또한 네임 스페이스가 루트 수준 또는 봉투에있는 경우 어떻게 중요합니까? – sreehari

+0

@sreehari : 비누 요청으로 보낼 것이므로 봉투 안에 있어야합니다. 네임 스페이스의 위치와 관련해서는 위치가 중요한지는 잘 모르겠습니다. 여기에있는 샘플 요청의 네임 스페이스는 봉투 안쪽에 있으므로 안전한쪽으로 가기 위해 따라야합니다. – Arci

+0

왜 이것을 위해 JAX-WS를 사용하지 않습니까? –

답변

1

.

"<Envelope><Body>" + your_xml + "</Body></Envelope> 

네임 스페이스는 항상 요소 수준으로 유지하십시오. 봉투 수준이 아닙니다. 요소를 볼 때 어떤 유형인지 명확하게 알기 때문입니다. 네임 스페이스를 어디에 둘 것인지는 중요하지 않습니다.

마샬링 된 XML에 문제가 있습니다. 올바른 XML은 다음과 같습니다 다시

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
    <ns:name>Name</ns:name> 
    <ns:age>18</ns:age> 
</ns:Customer> 

, 당신이 네임 스페이스 선언을 넣을 경우 문제가되지 않습니다

<ns:Customer xmlns:ns="http://www.example.org/beanLevelNamespace"> 
    <ns:id>201200001</ns:id> 
</ns:Customer> 

<Customer xmlns="http://www.example.org/beanLevelNamespace"> 
    <id>201200001</id> 
</Customer> 

<ns1:Customer xmlns:ns1="http://www.example.org/beanLevelNamespace"> 
    <ns2:id xmlns:ns2="http://www.example.org/beanLevelNamespace">201200001</ns2:id> 
</ns1:Customer> 

을 그들은 모두 동일합니다.

+0

감사! JAXB에서 비누 봉투도 만들 수있는 방법이 있다고 생각했습니다. 아니면 JAXB에 그러한 설정이 없습니까? 또한 단순히 마샬링 된 xml에 SOAP 태그를 추가하면 태그가 비누 봉투에 포함됩니다. 생성 된 xml에 태그를 포함하지 않도록 JAXB를 설정할 수 있습니까? – Arci

+1

JAX-B는 XML 처리 API입니다. 그것은 모든 XML을 처리 할 수 ​​있습니다. 웹 서비스를 호출하기 위해 JAX-WS와 같은 또 다른 API를 사용하게됩니다. 이 두 가지를 섞지 마십시오. 왜 코드에서 SOAP Envelop를 다루고 싶습니까? 이것은 JAX-WS에 의해 수행 된 배후에서 수행 될 것입니다. – sreehari

+0

이미 웹 서비스를 호출하는 클래스가 있습니다. 그러나 웹 서비스에 대한 커넥터 역할 만합니다. 그것이 작동하려면 전체 SOAP 봉투와 봉투 내용이 상기 클래스에 전달되어야합니다. 따라서 SOAP 봉투를 봉투의 내용과 함께 만들어서 해당 클래스에 전달해야합니다. 우리는 JAX-WS를 사용하지 않습니다. – Arci

관련 문제