2011-01-25 8 views
9

。最初にWSDL。私は生成されたクラスの鉱山にSerializableを実装したい。私は今JAXB-RIとCXFを持つ、JAX-WSバインドとシリアライズ可能なクラスを生成した

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...> 
    <bindings node="wsdl:definitions/wsdl:portType[@name='Foo']"> 
     <!-- change the generated SEI class --> 
     <class name="IFooService" /> 
    </bindings> 
</jaxws:bindings> 

いいえ、この文脈では、どこで、どのような私は追加する必要があります動作します以下のXMLバインディング(SEIクラス名が変更されます)があります。私が試した:

<xsd:annotation> 
    <xsd:appinfo> 
     <jaxb:globalBindings> 
      <xjc:serializable uid="12343" /> 
     </jaxb:globalBindings> 
    </xsd:appinfo> 
</xsd:annotation> 

<jxb:globalBindings> 
    <jxb:serializable/> 
</jxb:globalBindings> 

を内側と外側の両方<bindings>タグ - のいずれかSerializableが追加されていない、またはクラスは(誤りなく)全く発生しません。

も参照してくださいthis thread

だから、私はそれは二つの方法で働かせた

+0

JAXBのカスタマイズを結合首に本当の痛みがあります。彼らはJAXB 1.xの悪い昔からの二日酔いで、2.xでは適切に再設計されませんでした。 – skaffman

+0

[JAXBを使用してxsdからSerializableインターフェイスを実装するJavaクラスを生成する方法は?](http://stackoverflow.com/questions/1513972/how-to-generate-a-java-class-which-implements- serializable-interface-from-xsd-usi) –

答えて

6

ことを実行する方法を正確に:として、JAXBのみである第二の結合ファイルを、使用して

  1. パスカルが示したものhis answer

  2. 名前を扱う別の<bindings>タグを指定するとスペース:あなたはそれを行うにはXJCプラグインを実装することができ

    <bindings 
        node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://www.yoursite.com/services/mynamespace']"> 
        <jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
         xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
         <jxb:serializable /> 
        </jxb:globalBindings> 
    </bindings> 
    
+0

これらを拡張できますか? #1では、第2のファイルを 'wsimport'にどのように渡しますか? #2の場合、 ''はこれを行い、 'jaxws'はあなたの例のデフォルトの名前空間ですか? – OrangeDog

1

public class SerializablePlugin extends Plugin 
{ 

    @Override 
    public boolean run(Outline outline, Options options, ErrorHandler errorHandler) throws SAXException 
    { 
    for (ClassOutline classOutline : outline.getClasses()) 
    { 
    JDefinedClass definedClass = classOutline.implClass; 
    definedClass._implements(codeModel.ref(Serializable.class)); 
    } 
    return true; 
    } 

... 
} 

その後、あなたはSchemaCompilerオプションにプラグインを追加することができます。

WsimportOptions wsimportOptions = new WsimportOptions(); 
wsimportOptions.getSchemaCompiler().getOptions().activePlugins.add(new SerializablePlugin()); 
関連する問題