завершение работы JVM, поскольку для ActorSystem [mpe] java.lang.StackOverflowError: null включена функция «akka.jvm-exit-on-fatal-error»: - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над исправлением, которое должно принять запрос SOAP XML, значение которого меньше 1 000 000.Чтобы мы могли проверять большие XML-документы перед обработкой.

Теперь я запутался в сообщениях об ошибках akka, когда пороговое значение меньше 1 000 000.Я заметил, что если элементы под одним родителем больше 2000, я получаю эту ошибку.если элементы разделены с несколькими родительскими элементами, мы не получим ошибку.Пожалуйста, помогите мне выяснить ниже ошибку от akka.

I have also to tried with disabling "akka.jvm-exit-on-fatal-error" in the configuration.

akka {

  jvm-exit-on-fatal-error = off

  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }

  remote {
    enabled-transports = ["akka.remote.netty.ssl"] 
    .
    .
    .
  }
} 

Пример тела запроса мыла:

<soapenv:Body>
    <cai3:Create>
        <cai3:Attributes>
            <CreateAttributes attributeId="1">
                <attributeId>12345678</attributeId>
                <!--Zero or more repetitions:-->
                <node1 attributeId="12345678">
                    <node1>12345678</node1>
                    <node1/>
                </node1> 
                .......
                .......
                .......
                .......
                .......
                .......
                .......

                on so on upto 3000 same elements

                </CreateAttributes>
        </cai3:Attributes>
    </cai3:Create>
</soapenv:Body>

Журнал исключений

Module 2019-02-13 17:07:20,669+0800 [t-dispatcher-16] ERROR [akka.actor.ActorSystemImpl] Uncaught error from thread [mpe-akka.remote.default-remote-dispatcher-6]: null, shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[mpe]
java.lang.StackOverflowError: null
        at java.lang.Exception.<init>(Exception.java:76) [na:1.8.0_172]
        at java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:89) [na:1.8.0_172]
        at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72) [na:1.8.0_172]
        at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source) [na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [na:1.8.0_172]
        at java.lang.reflect.Method.invoke(Method.java:498) [na:1.8.0_172]
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1128) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) [na:1.8.0_172]
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) [na:1.8.0_172]
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) [na:1.8.0_172]
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) [na:1.8.0_172]
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) [na:1.8.0_172]
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) [na:1.8.0_172]

1 Ответ

0 голосов
/ 14 февраля 2019

Не похоже, что у вас возникла проблема с использованием сообщения SOAP через akka-http.

Судя по опубликованной трассировке стека, проблема заключается в сериализации java, которая вызывает java.lang.StackOverflowError, и она либо приходит, потому что вы отправляете сообщение через akka-remote, akka-cluster, либо сохраняете это сообщение с помощью akka-persistence.Это места, где можно использовать сериализацию Java в akka.Если вы не используете это явно самостоятельно.

Вы можете прочитать, почему JavaSerializationIsBroken и вызывает StackOverflowError ошибки.

Я предлагаю вам попробовать использование сообщений без участия akka-remote и akka-persistence.Если это помогает, вы знаете, что проблема заключается в сериализации Java.

Следующим шагом будет замена java-сериализации на более современные протоколы сериализации, такие как protocol-buffers .

...