cxf wsdl2java генерировать «защищенные» атрибуты, как генерировать частные?

Я использую cxf-codegen-plugin (maven) с целью wsdl2java для создания java-кода из моего wsdl.

Проблема в том, что он генерирует атрибуты protected, когда мне нужны атрибуты private:

Мой элемент wsdl:

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

Ожидал:

@XmlElement(required = true)
private String productCode;

Результат:

@XmlElement(required = true)
protected String productCode;

Есть ли что добавить в мой wsdl или в конфигурацию плагина для создания частных полей?

Спасибо !


person Jerome VDL    schedule 21.11.2013    source источник


Ответы (1)


Я думаю, что это из-за jaxb, чем cxf. Для этого вам нужно разработать собственный плагин xjc.

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

Также погуглите о разработке и подключении собственного xjc Создание плагина было правильным путем. Повторное использование кода на этом форуме

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;
    }

}
person constantlearner    schedule 21.11.2013
comment
Я попробую это как можно скорее и скажу вам, если это сработает, спасибо! - person Jerome VDL; 22.11.2013