2017-09-18 5 views
0

私はオブジェクトに変換しようとしているXML文書を持っています。これはこのように見えます。SpringMVC JAXBは名前空間を持つXML文書を変換しません

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> 
    <Items> 
     <Request> 
      <IsValid>false</IsValid> 
      <ItemSearchRequest> 
       <Keywords>php</Keywords> 
       <ResponseGroup>Offers</ResponseGroup> 
      </ItemSearchRequest> 
     </Request> 
    </Items> 
    <OperationRequest> 
     <HTTPHeaders> 
      <Header Name="UserAgent" Value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" /> 
     </HTTPHeaders> 
     <RequestId>1e3171b9-c476-4833-90ff-bc65ebca09e7</RequestId> 
    </OperationRequest> 
</ItemSearchResponse> 

しかし、この部分をXMLファイルxmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"に含めると、機能しません。 XMLファイルを読み込んでJAXBに送り、再度出力してブラウザで同じ構造を取得しているかどうかを確認します。これは私のコードです。

@RequestMapping("/samplexml") 
public SampleXML CreateXMLFile() throws EncoderException { 
    try { 

      File file = new File("C:\\Users\\Caciocode\\eclipse-workspace\\earplugs\\src\\main\\resources\\public\\samplexml.xml"); 
      JAXBContext jaxbContext = JAXBContext.newInstance(SampleXML.class); 

      Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      SampleXML sample = (SampleXML) jaxbUnmarshaller.unmarshal(file); 
      System.out.println(sample); 
      return sample; 

      } catch (JAXBException e) { 
      e.printStackTrace(); 
      return null; 
      } 
} 

周り読んだ後、私はNamespacePrefixMapperを作成する必要があると思います。そうなら、私に方法を教えてください。名前空間は常にそこにあります。

答えて

0

あなたのSampleXMLクラスは指定された名前空間を持つ必要があります(含まれているすべてのオブジェクトクラスと同じように)、私は一般的にパッケージ情報を使用してこれを実行するので、パッケージ全体をカバーします。

関連する問題