Petals ESB Container

StackOverflowError dans la WebConsole

Details

  • Type: Bug Bug
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 3.1
  • Fix Version/s: 3.1.1, 4.0.0
  • Component/s: Administration
  • Security Level: Public
  • Description:
    Hide

    Je n'arrive plus à utiliser la supervision technique (monitoring) dans la console web.

    J'y arrivais au début et maintenant j'ai tout le temps l'erreur suivante (même après redémarrage Tomcat):

    [xmlmap://org.ow2.petals.tools.webconsole.xmlbeans/unversioned] INFO: Selected default mapping method 'org.ow2.opensuit.xmlmap.BindWithAnnotations'
    Jul 21, 2010 1:29:36 PM org.ow2.opensuit.xml.base.error.ErrorHandler servePage
    SEVERE: Error while rendering error page:
    java.lang.StackOverflowError
    at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2774)
    at java.io.ObjectInputStream.readHandle(ObjectInputStream.java:1431)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1490)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
    + 1000 more lines

    Show
    Je n'arrive plus à utiliser la supervision technique (monitoring) dans la console web. J'y arrivais au début et maintenant j'ai tout le temps l'erreur suivante (même après redémarrage Tomcat): [xmlmap://org.ow2.petals.tools.webconsole.xmlbeans/unversioned] INFO: Selected default mapping method 'org.ow2.opensuit.xmlmap.BindWithAnnotations' Jul 21, 2010 1:29:36 PM org.ow2.opensuit.xml.base.error.ErrorHandler servePage SEVERE: Error while rendering error page: java.lang.StackOverflowError at java.io.ObjectInputStream$BlockDataInputStream.readInt(ObjectInputStream.java:2774) at java.io.ObjectInputStream.readHandle(ObjectInputStream.java:1431) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1490) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + 1000 more lines
  • Environment:
    PetalsESB 3.1
    Petals WebConsole 2.0.3
  1. conf.xml
    (0.5 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:06:12 +0200
  2. logsTomcat.txt
    (195 kB)
    Charles Casadei
    Thu, 22 Jul 2010 - 12:38:21 +0200
  3. patch-getDescription.diff
    (5 kB)
    mjambert
    Tue, 10 Aug 2010 - 14:23:01 +0200
  4. petals-bc-soap-4.0.3-20100704.073518-7.zip
    (16.83 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:50:41 +0200
  5. petals-se-bpel-1.0.4-20100701.133023-4.zip
    (11.15 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:51:43 +0200
  6. petals-se-eip-2.5-20100610.103318-7.zip
    (4.54 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:51:43 +0200
  7. petals-se-kpi-1.0.4-SNAPSHOT.zip
    (17.77 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:04:14 +0200
  8. petals-se-notification-1.0.2.zip
    (4.55 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:51:43 +0200
  9. petals-se-xslt-2.3.3-SNAPSHOT.zip
    (6.12 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:04:14 +0200
  10. petals-view.properties
    (2 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:06:12 +0200
  11. sa-AD001-CreerMissionPraxedo-1.0.0-SNAPSHOT.zip
    (24 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:53:55 +0200
  12. sa-AD002-KPI-1.0.0-SNAPSHOT.zip
    (9 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:53:55 +0200
  13. sa-AD002-supprEventsPraxedo-1.0.0-SNAPSHOT.zip
    (23 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:55:12 +0200
  14. sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip
    (92 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:53:55 +0200
  15. sa-AD009-RecupVersionPointInterventionSigma-kpi-1.0.0-SNAPSHOT.zip
    (9 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:03:04 +0200
  16. sa-FAIS004-RaiseUpPartnerFaultAsIs-1.0.0-SNAPSHOT.zip
    (13 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:00:45 +0200
  17. sa-FAIS004-RaiseUpPartnerFaultAsIs-kpi-1.0.0-SNAPSHOT.zip
    (10 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:00:45 +0200
  18. sa-KPI-AD001-1.0.0-SNAPSHOT.zip
    (9 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:03:04 +0200
  19. sa-OR001-EnvoiOtPlanifie-1.0.0-SNAPSHOT.zip
    (14 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:55:12 +0200
  20. sa-OR001-KPI-1.0.0-SNAPSHOT.zip
    (10 kB)
    Charles Casadei
    Tue, 27 Jul 2010 - 16:00:45 +0200
  21. sa-SOAP-AD009-consume-1.0.0-SNAPSHOT.zip
    (2 kB)
    Charles Casadei
    Thu, 29 Jul 2010 - 12:27:11 +0200
  22. sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.modded
    (76 kB)
    Charles Casadei
    Thu, 29 Jul 2010 - 12:12:23 +0200
  23. sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.original
    (76 kB)
    Charles Casadei
    Thu, 29 Jul 2010 - 12:12:23 +0200
  24. server.properties
    (6 kB)
    Charles Casadei
    Thu, 22 Jul 2010 - 12:38:21 +0200
  25. sl-oracle-driver-10.2.0.2.zip
    (1.40 MB)
    Charles Casadei
    Tue, 27 Jul 2010 - 15:55:12 +0200
  26. topology.xml
    (3 kB)
    Charles Casadei
    Thu, 22 Jul 2010 - 12:38:21 +0200

Activity

Hide
mjambert added a comment - Tue, 10 Aug 2010 - 14:23:01 +0200

Fixed by letting getDescription return a raw String instead of a DOM document.
(See attached kernel patch).

Show
mjambert added a comment - Tue, 10 Aug 2010 - 14:23:01 +0200 Fixed by letting getDescription return a raw String instead of a DOM document. (See attached kernel patch).
Hide
mjambert added a comment - Tue, 10 Aug 2010 - 14:00:46 +0200

Registry log confirm that the WSDL inserted in database is correct.
However it, once all imports resolved, it is huge (8MB).

Serialization occuring between MBean and jmx client causes a stack overflow because of this complexity, and mostly because a dom Document is used for serialization (which is a highly deep and nested structure).

A solution could probably be to serialize WSDL as a String, and parse it back on client side.

Show
mjambert added a comment - Tue, 10 Aug 2010 - 14:00:46 +0200 Registry log confirm that the WSDL inserted in database is correct. However it, once all imports resolved, it is huge (8MB). Serialization occuring between MBean and jmx client causes a stack overflow because of this complexity, and mostly because a dom Document is used for serialization (which is a highly deep and nested structure). A solution could probably be to serialize WSDL as a String, and parse it back on client side.
Hide
mjambert added a comment - Tue, 10 Aug 2010 - 11:39:03 +0200 - edited

To reproduce the bug easily :

  • launch petals
  • deploy bc-soap
  • deploy sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip
  • open jconsole
  • invoke EndpointRegistry.getDescription with service name and endpoint name corresponding to sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip (taken from petals console)

all other attachments are useless

=> StackOverflow

Show
mjambert added a comment - Tue, 10 Aug 2010 - 11:39:03 +0200 - edited To reproduce the bug easily :
  • launch petals
  • deploy bc-soap
  • deploy sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip
  • open jconsole
  • invoke EndpointRegistry.getDescription with service name and endpoint name corresponding to sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip (taken from petals console)
all other attachments are useless => StackOverflow
Hide
mjambert added a comment - Mon, 9 Aug 2010 - 17:12:44 +0200

EasyWSDL reads properly wsdl contained in su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip
I would say that the problem lies elsewhere between the jmx client and the mxbean...

Show
mjambert added a comment - Mon, 9 Aug 2010 - 17:12:44 +0200 EasyWSDL reads properly wsdl contained in su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip I would say that the problem lies elsewhere between the jmx client and the mxbean...
Hide
Charles Casadei added a comment - Thu, 29 Jul 2010 - 12:26:39 +0200

More precisely, the SU "su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip" (.original) is the one that causes this problem.

This SU has a WSDL with a lot of XSD imports and a **complex** directory structure. The WSDL is valid, but Petals can't handle it, since I can't retrieve the WSDL when I expose this SU to the outter world. So I think this is more of a PetalsESB / EasyWSDL problem than anything else. But is it possible to display a line corresponding to the faulty endpoint, with the error message we get when we call the getDescriptionMethod() ? (eg something like this : <error><description>Unable to get WSDL for this service</description><reason>WSDL description can not been retrieved from JBI endpoint</reason></error>)

NB :

  • sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.original is the original SA containing the original problematic SU.
  • sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.modded is a modded SA, with all the imports at the same level.
  • sa-SOAP-AD009-consume-1.0.0-SNAPSHOT.zip is the consumer SU
Show
Charles Casadei added a comment - Thu, 29 Jul 2010 - 12:26:39 +0200 More precisely, the SU "su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip" (.original) is the one that causes this problem. This SU has a WSDL with a lot of XSD imports and a **complex** directory structure. The WSDL is valid, but Petals can't handle it, since I can't retrieve the WSDL when I expose this SU to the outter world. So I think this is more of a PetalsESB / EasyWSDL problem than anything else. But is it possible to display a line corresponding to the faulty endpoint, with the error message we get when we call the getDescriptionMethod() ? (eg something like this : <error><description>Unable to get WSDL for this service</description><reason>WSDL description can not been retrieved from JBI endpoint</reason></error>) NB :
  • sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.original is the original SA containing the original problematic SU.
  • sa-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT.zip.modded is a modded SA, with all the imports at the same level.
  • sa-SOAP-AD009-consume-1.0.0-SNAPSHOT.zip is the consumer SU
Hide
Charles Casadei added a comment - Thu, 29 Jul 2010 - 11:47:37 +0200

La SA "sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip" semble être à l'origine du problème

Show
Charles Casadei added a comment - Thu, 29 Jul 2010 - 11:47:37 +0200 La SA "sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT.zip" semble être à l'origine du problème
Hide
Adrien Ruffie added a comment - Wed, 28 Jul 2010 - 09:47:07 +0200

I investigated the problem, it appears in the following method:

public Document getDescription(String serviceName, String endpointName)
throws EndpointRegistryServiceErrorException

This method is located in EndpointRegistryClient class of petals-jmx

The following line returned the stacktrace by performing the action with
service name = {http://wsdls.datastream.net/MP0302_GetAssetEquipment_001}AD009-GetAssetEquipmentService
endpoint name = edpt-8CCE22D14897EECDFF54534999866461=

document = (Document) this.performAction(GET_ENDPOINT_DESCRIPTION, objects, strings);

The document that attempts to be recovered corresponds to the following service unit : su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT

I tested by removing the service assembly (sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT-07-27-2010-043849102) which contains this service unit and it works correctly.

Show
Adrien Ruffie added a comment - Wed, 28 Jul 2010 - 09:47:07 +0200 I investigated the problem, it appears in the following method: public Document getDescription(String serviceName, String endpointName) throws EndpointRegistryServiceErrorException This method is located in EndpointRegistryClient class of petals-jmx The following line returned the stacktrace by performing the action with service name = {http://wsdls.datastream.net/MP0302_GetAssetEquipment_001}AD009-GetAssetEquipmentService endpoint name = edpt-8CCE22D14897EECDFF54534999866461= document = (Document) this.performAction(GET_ENDPOINT_DESCRIPTION, objects, strings); The document that attempts to be recovered corresponds to the following service unit : su-SOAP-AD009-GetAssetEquipmentService-provide-1.0.0-SNAPSHOT I tested by removing the service assembly (sa-AD009-RecupVersionPointInterventionSigma-1.0.0-SNAPSHOT-07-27-2010-043849102) which contains this service unit and it works correctly.
Hide
Charles Casadei added a comment - Tue, 27 Jul 2010 - 16:12:16 +0200

Nous avons réussi à reproduire le problème. Il semble venir du nombre de SU installées.

1. Lancer Petals 3.1 (conf par défaut)
2. Créer une base pour le SE-KPI
3. Prendre le fichier de conf petals-view.properties, et le renseigner pour qu'il pointe sur la base de PetalsView
4. Modifier le chemin du fichier de conf de petals-view dans le jbi.xml du SE-KPI
5. Modifier le jbi.xml du SE-XSLT pour qu'il pointe vers le fichier conf.xml (pas besoin de le modifier, il est déjà OK pour la base de transco)
6. Déployer la shared-library oracle
7. Installer tous les composants, en commencant par le SE-KPI
8. Déployer toutes les SU
9. Démarrer Tomcat, aller sur la page de la webconsole, et constater la présence d'une stacktrace.

Show
Charles Casadei added a comment - Tue, 27 Jul 2010 - 16:12:16 +0200 Nous avons réussi à reproduire le problème. Il semble venir du nombre de SU installées. 1. Lancer Petals 3.1 (conf par défaut) 2. Créer une base pour le SE-KPI 3. Prendre le fichier de conf petals-view.properties, et le renseigner pour qu'il pointe sur la base de PetalsView 4. Modifier le chemin du fichier de conf de petals-view dans le jbi.xml du SE-KPI 5. Modifier le jbi.xml du SE-XSLT pour qu'il pointe vers le fichier conf.xml (pas besoin de le modifier, il est déjà OK pour la base de transco) 6. Déployer la shared-library oracle 7. Installer tous les composants, en commencant par le SE-KPI 8. Déployer toutes les SU 9. Démarrer Tomcat, aller sur la page de la webconsole, et constater la présence d'une stacktrace.
Hide
Charles Casadei added a comment - Thu, 22 Jul 2010 - 12:39:29 +0200

Impossible à reproduire pour le moment, il nous faut plus d'informations sur le contexte dans lequel se produit cette exception

Show
Charles Casadei added a comment - Thu, 22 Jul 2010 - 12:39:29 +0200 Impossible à reproduire pour le moment, il nous faut plus d'informations sur le contexte dans lequel se produit cette exception
Hide
Charles Casadei added a comment - Thu, 22 Jul 2010 - 12:38:21 +0200

Le problème ne se produit que lorsque la webconsole essaie de contacter Petals.

Show
Charles Casadei added a comment - Thu, 22 Jul 2010 - 12:38:21 +0200 Le problème ne se produit que lorsque la webconsole essaie de contacter Petals.

People

Dates

  • Created:
    Thu, 22 Jul 2010 - 12:37:02 +0200
    Updated:
    Wed, 25 Aug 2010 - 14:41:44 +0200
    Resolved:
    Wed, 25 Aug 2010 - 14:41:44 +0200

Time Tracking

Estimated:
Not Specified
Original Estimate - Not Specified
Remaining:
0m
Remaining Estimate - 0 minutes
Logged:
1d 1h
Time Spent - 1 day, 1 hour