2011-10-20 4 views
7

私はAPIに合ったxsdファイルを提供するサードパーティ製のインターフェースを持っています。そのマッピングのいくつかは、私は私のBooleanAdapterため@XmlJavaTypeAdapterクラスを指定するには、バインディングファイルを使用したいませんが、今のところ何の喜びと思い、かなりのJava、バインディングファイル経由で@XmlJavaTypeAdapterクラスを指定しますか?

:-(0 & 1いつものようにブール値ではありません。

バインディングファイル:

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="http://java.sun.com/xml/ns/jaxws" 
    jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="GetUserDetailsResponse.xsd" node="/xs:schema" > 
     <jaxb:globalBindings underscoreBinding="asWordSeparator" > 
      <jaxb:serializable uid="1" /> 
      <jaxb:javaType name="java.lang.Boolean" xmlType="xs:boolean" 
printMethod="mumble.bindings.BooleanAdapter.marshall" 
parseMethod="mumble.bindings.BooleanAdapter.unmarshall" /> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

そして、私はPOMから関連するビットをMavenを使用していますので、:

<strict>false</strict> 
<extension>true</extension> 
<verbose>true</verbose> 
<enableWrapperStyle>false</enableWrapperStyle> 
<enableAsyncMapping>false</enableAsyncMapping> 

私はenableWrapperSを切り替えました

import javax.xml.bind.annotation.adapters.XmlAdapter; 
public class Adapter1 
    extends XmlAdapter<String, Boolean>{ 
    public Boolean unmarshal(String value) { 
     return (mumble.bindings.BooleanAdapter.unmarshall(value)); 
    } 

    public String marshal(Boolean value) { 
     return (mumble.bindings.BooleanAdapter.marshall(value)); 
    } 
} 

が、私は生成されたラッパーを取り除くために使用し、BooleanAdapterを使用することができ、いくつかのバインディングは魔法をファイルですとtyleと変更なし

私は何を終わらアップが間違った型の生成アダプタです直接?

+0

次5月のヘルプ:http://blog.bdoughan.com/2011/08/xml-schema-to-java-generating.html –

+0

いいえ、私はすでにそれを見てきました、それは私が望むものではありません。私はおそらく、もし私がそれを変換するint <-->ブール値ではなく、文字列<-->ブール値を強制することができますアダプター1と一緒に暮らすことができますが、不要な余分な層のアダプターは最終的に私を苛立たせるだろう。ありがとう。 –

+2

これを参照してください:http://adventuresintechology.blogspot.ca/2012/04/binding-custom-xmljavatypeadapter-to.html。私はあなたがこの記事の助けを借りてここに求めているものを正確に実装することができました。 –

答えて

10

<jaxb:javaType>ではなく、バインド設定で<xjc:javaType>を使用する必要があります。たとえば :

<xjc:javaType name="java.lang.Boolean" xmlType="xs:boolean" 
       adapter="mumble.bindings.BooleanAdapter"/> 

は、私は古い質問に答えるよ理解し、私はコメントを書き込むための十分な評判を持っていません。

+0

「私は古い質問に答えていることを理解していますが、コメントを書くには十分な評判がありません。」あなたはコメントで答えるつもりはありません! :) –

+0

は動作しません:https://stackoverflow.com/questions/46037803/why-jaxb-adapter-annotation-is-not-added-to-the-proxy-classes – grep

3

それはスーパー後半応答だ、私は実現するが、それでもmvvの応答は完全に私がやって、どこで構造における新しい要素フィットたものを把握するために苦労して私を残し、私は誰のためのいくつかのさらなる詳細を追加したいですこの後に来る。

mvvの場合、最も簡単な答えはxjc:javaTypeを使用するように変更することです。 xjc:javaTypeの使用方法の詳細については、jaxb customizationを参照してください。

また、カスタムアダプタ(BooleanAdapter)を変更して、XmlAdapterインターフェイスを実装する必要があります。

最終的に、あなたの結合ではなく、次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="http://java.sun.com/xml/ns/jaxws" 
    jaxb:extensionBindingPrefixes="xjc" jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="GetUserDetailsResponse.xsd" node="/xs:schema" > 
     <jaxb:globalBindings underscoreBinding="asWordSeparator" > 
      <jaxb:serializable uid="1" /> 
      <xjc:javaType name="java.lang.Boolean" xmlType="xs:boolean" 
        adapter="mumble.bindings.BooleanAdapter" /> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 
+0

jenrmagas:あなたはどのように知っていますか?アダプタでjava.util.Listのマーシャリングとアンマーシャリングを行うには? はxmlType = "xyz"を受け入れ、Schemaの "lists"は実際のスキーマタイプではなく、maxOccurance = unboundedで表されることに注意してください。 – Malvon

+0

hm ..動作しません:https://stackoverflow.com/questions/46037803/why-jaxb-adapter-annotation-is-not-added-to-the-proxy-classes – grep

関連する問題