2017-01-25 1 views
1

昨日私はタイトルに投稿されたようなjavaを更新しましたが、JAXBはXMLをもう解析しません。すべてのオブジェクトは単にヌルですが、何も設定されていないようです。JAXBは1.8.0_77から1.8.0_121にJavaをアップデートした後アンマーシャリングしません

このPOJOを考える - 私は非整列化のためにこれを使用

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name="ListMatchingProductsResult", propOrder={ 
    "products" 
}) 
@XmlRootElement(name = "ListMatchingProductsResult") 
public class ListMatchingProductsResult { 

    @XmlElement(name="Products") 
    private ProductList products; 

    /** 
    * Get the value of Products. 
    * 
    * @return The value of Products. 
    */ 
    public ProductList getProducts() { 
     return products; 
    } 

    /** 
    * Set the value of Products. 
    * 
    * @param products 
    *   The new value to set. 
    */ 
    public void setProducts(ProductList products) { 
     this.products = products; 
    } 

    /** 
    * Check to see if Products is set. 
    * 
    * @return true if Products is set. 
    */ 
    public boolean isSetProducts() { 
     return products != null; 
    } 


    @Override 
    public String toString() { 
     return MoreObjects.toStringHelper(this) 
       .add("products", products) 
       .toString(); 
    } 
} 

ListMatchingProductsResponse

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "ListMatchingProductsResponse", propOrder = { 
     "listMatchingProductsResult", 
     "responseMetadata" 
}) 
@XmlRootElement(name = "ListMatchingProductsResponse") 
public class ListMatchingProductsResponse { 
    @XmlElement(name = "ListMatchingProductsResult") 
    private ListMatchingProductsResult listMatchingProductsResult; 
    @XmlElement(name = "ResponseMetadata") 
    private ResponseMetadata responseMetadata; 
    @XmlAttribute(name = "xmlns") 
    private String xmlns; 

    public String getXmlns() { 
     return xmlns; 
    } 

    public void setXmlns(String xmlns) { 
     this.xmlns = xmlns; 
    } 


    /** 
    * Get the value of ListMatchingProductsResult. 
    * 
    * @return The value of ListMatchingProductsResult. 
    */ 
    public ListMatchingProductsResult getListMatchingProductsResult() { 
     return listMatchingProductsResult; 
    } 

    /** 
    * Set the value of ListMatchingProductsResult. 
    * 
    * @param listMatchingProductsResult The new value to set. 
    */ 
    public void setListMatchingProductsResult(ListMatchingProductsResult listMatchingProductsResult) { 
     this.listMatchingProductsResult = listMatchingProductsResult; 
    } 

    /** 
    * Get the value of ResponseMetadata. 
    * 
    * @return The value of ResponseMetadata. 
    */ 
    public ResponseMetadata getResponseMetadata() { 
     return responseMetadata; 
    } 

    /** 
    * Set the value of ResponseMetadata. 
    * 
    * @param responseMetadata The new value to set. 
    */ 
    public void setResponseMetadata(ResponseMetadata responseMetadata) { 
     this.responseMetadata = responseMetadata; 
    } 
} 

そしてListMatchingProductsResult:私がいないと私は思いビットが失わ

String s = getResult(); 
// s is the expected xml string 
ListMatchingProductsResponse m = JAXB.unmarshal(new StringReader(s), ListMatchingProductsResponse.class); 
log.info(m); // [email protected] 
log.info(m.getListMatchingProductsResult()); // null 

何らかの理由があるのを見てください。また、JAXBに関してchangeloに変更がありませんg。

私はここで間違っていますか?

次の答えは、私は今、自分のプロジェクトに、次の依存関係が含まれていたこれまで

JAXB Configuration was broken by upgrading from JDK 1.7 to JDK 1.8 u05 for collections

Unmarshalling jaxB doesn't work, objects null

Unmarshall with JAXB doesn't work

UPDATE

を自分の問題を解決していなかった

group: 'org.jvnet.jaxb2.maven2', name: 'maven-jaxb2-plugin', version: '0.13.1' 

もう一度動作します。新しい質問 - それはなぜですか?何か不足している/ 121のJavaリリースのバグはありますか?

+0

'maven-jaxb2-plugin'はコード生成のためのMavenプラグインです。あなたはコンパイルやランタイムの依存関係としてそれを含めるべきではありません。 – lexicore

+0

@lexicore私はいくつかの異なるjaxb依存関係を試しましたが、どれもうまくいきませんでした。私はそれが意味をなさないが、私はなぜこれが再び動作するようにするのを知りたいのですか? – Michael

+1

'maven-jaxb2-plugin'自体がJAXBライブラリに依存しています。だから、基本的にMavenプラグインからの依存関係を "継承"することになります。これを参照してください:http://stackoverflow.com/questions/26413431/which-artifacts-should-i-use-for-jaxb-ri-in-my-maven-project – lexicore

答えて

2

これは、JREの変更が技術的にバグではなく、1.8u91以前のバージョンはより寛容であり、無効な名前空間のXMLを許可し、xumlが正しくない場合は1.8u101 +名前空間。

私はGitHubの例を作成してその違いを説明しました。 2つのメインを実行するNoSchemaWithSchema 1.8u91と1.8u101 +を使用して動作の違いを確認します。

私の場合、XMLにはデフォルトの名前空間は含まれていませんでしたが、要素には名前空間の接頭辞が付けられていませんでした(broker.xml)。これは1.8u91ではうまくいきましたが、1.8u101では失敗しました。アップグレードは私たちのコードを壊しましたが、これは技術的にOraclesの欠陥ではありません。なぜなら、XMLの名前空間が正しくないからです。

+0

私はスタンドアロンの例を構築しようとしていましたが、次のことを発見しました。 'jaxb2-maven-plugin'は' package-info.java'とObjectFactory.javaの両方を作成します。パッケージ情報(またはその@XmlSchemaアノテーション)を削除すると、Jaxbもu101 +で動作します。だから古いバージョンはもっと寛大で、新しいバージョンはもっと厳しいかもしれない。 –

関連する問題