2013-11-21 143 views
3

我正在使用cxf-codegen-plugin(maven)和wsdl2java目标来从我的wsdl生成java代码。cxf wsdl2java生成'protected'属性,如何生成私有属性?

的问题是,它产生保护属性时,我想私人属性:

我的WSDL元素:

<element name="productCode" type="string"/> 

预计:

@XmlElement(required = true) 
private String productCode; 

结果:

@XmlElement(required = true) 
protected String productCode; 

在我的wsdl或插件配置中添加什么来生成私有字段?

谢谢!

回答

2

我认为这是因为jaxb比cxf。你需要开发自己的xjc插件来做到这一点。

https://jaxb.java.net/nonav/2.0.2/docs/developPlugins.html

也是谷歌有关开发和插入自己的XJC 创建插件是正确的方式在这个论坛go.Resusing代码

public class PrivateMemberPlugin 
    extends Plugin 
{ 

    @Override 
    public String getOptionName() 
    { 
     return "Xpm"; 
    } 

    @Override 
    public String getUsage() 
    { 
     return " -Xpm : Change members visibility to private"; 
    } 

    @Override 
    public boolean run(Outline model, Options opt, ErrorHandler errorHandler) 
     throws SAXException 
    { 
     for (ClassOutline co : model.getClasses()) 
     { 

      JDefinedClass jdc = co.implClass; 
      // avoid concurrent modification by copying the fields in a new list 
      List<JFieldVar> fields = new ArrayList<JFieldVar>(jdc.fields().values()); 
      for (JFieldVar field : fields) 
      { 
       // never do something with serialVersionUID if it exists. 
       if (!field.name().equalsIgnoreCase("serialVersionuid")) 
       { 
        // only try to change members that are not private 
        if (field.mods().getValue() != JMod.PRIVATE) 
        { 
         // since there is no way to change the visibilty, remove the field an recreate it 
         jdc.removeField(field); 
         jdc.field(JMod.PRIVATE, field.type(), field.name()); 

        } 
       } 
      } 

     } 
     return true; 
    } 

} 
+0

我会尽快尝试这一点,如果告诉你它做的工作,谢谢! –