WFLYEJB0054:无法编组EJB参数

时间:2019-06-28 15:05:06

标签: java serialization jboss resourcebundle

标题上的错误是因为没有序列化,我知道是因为我之前有该错误,并由于以下原因而解决了该错误:https://developer.jboss.org/thread/279558

但是现在我有一个更大的问题,在调试时我发现我有一个名为“ MessageProvider”的类,它没有实现Serializable,所以我实现了它,但是错误仍然存​​在,我仔细检查了一下,发现了该类具有类型为ResourceBundle的属性,并猜测什么ResourceBundle没有实现Serializable,因此卡在其中,因为它来自Java“ root”包,因此我无法对其进行编辑。

这是MessageProvider类的一些代码:

@Dependent
public class MessageProvider implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /** The message provider. */
    public static MessageProvider messageProvider = new MessageProvider();

    /** The etiquetas msg. */
    private ResourceBundle etiquetasMsg;

    /** The sistema msg. */
    private ResourceBundle sistemaMsg;

这是我在调试时遇到的错误:

Caused by: java.io.NotSerializableException: java.util.PropertyResourceBundle
09:51:12,621 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:256)
09:51:12,622 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:130)
09:51:12,622 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.cloneFields(SerializingCloner.java:391)
09:51:12,622 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:311)
09:51:12,622 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:254)
09:51:12,622 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:130)
09:51:12,623 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.cloneFields(SerializingCloner.java:391)
09:51:12,623 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:311)
09:51:12,623 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:254)
09:51:12,623 ERROR [stderr] (default task-1)    at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:130)
09:51:12,623 ERROR [stderr] (default task-1)    at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:378)
09:51:12,624 ERROR [stderr] (default task-1)    ... 101 more

我尝试失败的尝试:

How to inject a non-serializable class (like java.util.ResourceBundle) with Weld

我尝试对此类属性使用“瞬态”: private transient ResourceBundle etiquetasMsg,但没有成功,之后尝试了

@PostConstruct
@PostActivate
public void getResourceBundle() {
    bundle = ResourceBundle.getBundle("/messages", locale );
}

但是它也没有用:/,如果你们需要更多详细信息来帮助我,请告诉我。

上下文: 我为REST服务进行了所有这些操作,并使用POSTMAN对其进行了测试,当验证不起作用时,我抛出了来自公司此处定义的类的异常,将其称为CompanyExceptions,该类从Exception扩展,所以该类CompanyExceptions使用MessageProvider类,而该类是使用ResourceBundle的类。

如果仅将CompanyExceptions替换为Exception,我不会从标题中得到错误。 因此,例如,如果我抛出类似“ throw new CompanyException("Failed to validate user password");”的异常,它将给我错误,但是如果我使用throw new Exception("Failed to validate user password");,则它可以工作。

0 个答案:

没有答案