是否有可能在创建web服务之前通过反射修改方法?



我有一个在操作参数中使用不可变类的web服务(这是因为其他开发人员在项目中工作)——这意味着没有公共设置。没有公共设置意味着webservice看不到属性。

我的想法是创建私有setter,并在我的webservice类中添加一个带有PostConstruct注释的init方法。在init方法中,所有私有设置都可以通过反射设置。

问题是用PostConstruct注释的init方法在部署时根本不调用。我使用JAX-WS并将项目部署到Glassfish。

你想做的事情听起来像是一个可怕的黑客。

你的问题,如果我没弄错的话,是在你的动作中用作参数的对象是不可变的。幸运的是,有很多方法可以使用注释定制JAXB映射。应该可以保持类不可变,但使字段对JAXB可见。

从这个答案,我看到:

package blog.immutable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="customer")
@XmlAccessorType(XmlAccessType.NONE)
public final class Customer {
    @XmlAttribute
    private final String name;
    @XmlElement
    private final Address address;
    @SuppressWarnings("unused")
    private Customer() {
        this(null, null);
    }
    public Customer(String name, Address address) {
        this.name = name;
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public Address getAddress() {
        return address;
    }
}

如果你不喜欢上面的代码需要一个无参数的构造函数Customer(),你可以看看这个更复杂的方法。

相关内容

  • 没有找到相关文章