WFLYEJB0054: не удалось маршалировать параметры EJB - PullRequest
0 голосов
/ 28 июня 2019

Ошибка в названии из-за отсутствия сериализации, я знаю это, потому что у меня была эта ошибка раньше, и я решил ее благодаря этому источнику: https://developer.jboss.org/thread/279558

Но теперь у меня есть большая проблема с этим,во время отладки я обнаружил, что у меня есть класс «MessageProvider», который не реализует Serializable, поэтому я заставил его реализовать его, но затем ошибка сохранилась, проверив более тщательно, я обнаружил, что этот класс имеет атрибуты, имеющие тип ResourceBundle, и угадайте, чтоResourceBundle не реализует Serializable, поэтому я застрял там, потому что я не могу редактировать его, так как он из "корневого" пакета Java.

Это некоторый код класса 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

Что я пробовал безуспешно:

Как внедрить несериализуемый класс (например, java.util.ResourceBundle) с помощью 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");, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...