Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-30347

[GSS](7.4.z) JDR hangs when trying to load the DTD from an external location

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • None
    • JDR
    • None
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      This issue can be reproduced with JBoss EAP 7.4.22 on OpenJDK8 latest update.

      1. Install JBoss EAP 7.4.22
      $ unzip jboss-eap-7.4.0.zip
      $ jboss-eap-7.4/bin/jboss-cli.sh --command="patch apply jboss-eap-7.4.22-patch.zip"
      
      2. Put a xml with DOCTYPE
      $ cat <<EOF > jboss-eap-7.4/standalone/configuration/web.xml
      <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  "http://java.sun.com/dtd/web-app_2_3.dtd">
      <web-app>
      </web-app>
      EOF
      
      3. Create a Byteman rule to simulate a hang on external HTTP requests
      $ cat <<EOF > ~/byteman-download-4.0.25/replay-jdr-hangup.btm
      RULE replay jdr hang-up by Thread.sleep
      CLASS java.net.AbstractPlainSocketImpl
      METHOD doConnect(java.net.InetAddress, int, int)
      AT ENTRY
      IF true
      DO
        traceStack("### BYTEMAN AbstractPlainSocketImpl.doConnect is going to sleep 30 seconds... \n");
        delay(30000);
      ENDRULE
      
      4. Attach byteman in jboss-eap-7.4/bin/standalone.conf
      $ diff -u standalone.conf.original standalone.conf
      --- standalone.conf.original	2025-06-11 14:35:53.825650352 +0900
      +++ standalone.conf	2025-06-11 14:36:09.876056823 +0900
      @@ -49,9 +49,11 @@
       #
       # Specify options to pass to the Java VM.
       #
      +BYTEMAN_HOME=/home/jboss/byteman-download-4.0.25
       if [ "x$JAVA_OPTS" = "x" ]; then
          JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true"
          JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
      +   JAVA_OPTS="$JAVA_OPTS -javaagent:${BYTEMAN_HOME}/lib/byteman.jar=script:${BYTEMAN_HOME}/rules/replay-jdr-hangup.btm,boot:${BYTEMAN_HOME}/lib/byteman.jar,sys:${BYTEMAN_HOME}/lib/byteman.jar"
       else
          echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS"
       fi
      
      5. Start JBoss EAP
      $ jboss-eap-7.4/bin/standalone.sh
      
      6. run jdr.sh
      $ jboss-eap-7.4/bin/jdr.sh
      
      7. The following message is logged in the JBoss EAP console
      4:38:24,966 INFO  [stdout] (management-handler-thread - 1) ### BYTEMAN AbstractPlainSocketImpl.doConnect is going to sleep 30 seconds... 
      14:38:24,966 INFO  [stdout] (management-handler-thread - 1) java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:-1)
      14:38:24,966 INFO  [stdout] (management-handler-thread - 1) 
      
      Show
      This issue can be reproduced with JBoss EAP 7.4.22 on OpenJDK8 latest update. 1. Install JBoss EAP 7.4.22 $ unzip jboss-eap-7.4.0.zip $ jboss-eap-7.4/bin/jboss-cli.sh --command= "patch apply jboss-eap-7.4.22-patch.zip" 2. Put a xml with DOCTYPE $ cat <<EOF > jboss-eap-7.4/standalone/configuration/web.xml <!DOCTYPE web-app PUBLIC "- //Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> </web-app> EOF 3. Create a Byteman rule to simulate a hang on external HTTP requests $ cat <<EOF > ~/byteman-download-4.0.25/replay-jdr-hangup.btm RULE replay jdr hang-up by Thread .sleep CLASS java.net.AbstractPlainSocketImpl METHOD doConnect(java.net.InetAddress, int , int ) AT ENTRY IF true DO traceStack( "### BYTEMAN AbstractPlainSocketImpl.doConnect is going to sleep 30 seconds... \n" ); delay(30000); ENDRULE 4. Attach byteman in jboss-eap-7.4/bin/standalone.conf $ diff -u standalone.conf.original standalone.conf --- standalone.conf.original 2025-06-11 14:35:53.825650352 +0900 +++ standalone.conf 2025-06-11 14:36:09.876056823 +0900 @@ -49,9 +49,11 @@ # # Specify options to pass to the Java VM. # +BYTEMAN_HOME=/home/jboss/byteman-download-4.0.25 if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS= "-Xms1303m -Xmx1303m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack= true " JAVA_OPTS= "$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless= true " + JAVA_OPTS= "$JAVA_OPTS -javaagent:${BYTEMAN_HOME}/lib/byteman.jar=script:${BYTEMAN_HOME}/rules/replay-jdr-hangup.btm,boot:${BYTEMAN_HOME}/lib/byteman.jar,sys:${BYTEMAN_HOME}/lib/byteman.jar" else echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS" fi 5. Start JBoss EAP $ jboss-eap-7.4/bin/standalone.sh 6. run jdr.sh $ jboss-eap-7.4/bin/jdr.sh 7. The following message is logged in the JBoss EAP console 4:38:24,966 INFO [stdout] (management-handler-thread - 1) ### BYTEMAN AbstractPlainSocketImpl.doConnect is going to sleep 30 seconds... 14:38:24,966 INFO [stdout] (management-handler-thread - 1) java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:-1) 14:38:24,966 INFO [stdout] (management-handler-thread - 1)

      If an XML file containing a DOCTYPE declaration that references an externally defined DTD is placed under JBOSS_HOME, jdr.sh may hang in an environment without internet connectivity. It is expected that diagnostic tools should not hang under any circumstances.

      Thread dump:

      "management-handler-thread - 1" #142 prio=5 os_prio=0 tid=0x000055dced591000 nid=0x821b waiting on condition [0x00007f55696fb000]
         java.lang.Thread.State: RUNNABLE
              at java.net.PlainSocketImpl.socketConnect(Native Method)
              at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
      	- locked <0x00000000ed858878> (a java.net.SocksSocketImpl)
      	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
      	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
      	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
      	at java.net.Socket.connect(Socket.java:607)
      	at java.net.Socket.connect(Socket.java:556)
      	at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
      	at sun.net.www.http.HttpClient.openServer(HttpClient.java:465)
      	at sun.net.www.http.HttpClient.openServer(HttpClient.java:560)
      	- locked <0x00000000ed853ab8> (a sun.net.www.http.HttpClient)
      	at sun.net.www.http.HttpClient.<init>(HttpClient.java:244)
      	at sun.net.www.http.HttpClient.New(HttpClient.java:341)
      	at sun.net.www.http.HttpClient.New(HttpClient.java:359)
      	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1243)
      	at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1177)
      	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1071)
      	at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1005)
      	at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
      	- locked <0x00000000ed8186b8> (a sun.net.www.protocol.http.HttpURLConnection)
      	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)
      	- locked <0x00000000ed8186b8> (a sun.net.www.protocol.http.HttpURLConnection)
      	at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:1033)
      	at org.apache.xerces.impl.XMLEntityManager.startEntity(XMLEntityManager.java:941)
      	at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:908)
      	at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:241)
      	at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(XMLDocumentScannerImpl.java:1001)
      	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324)
      	at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:875)
      	at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:798)
      	at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108)
      	at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:230)
      	at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:298)
      	at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
      	at org.jboss.as.jdr.util.XMLSanitizer.sanitize(XMLSanitizer.java:75)
      	at org.jboss.as.jdr.commands.CollectFiles.execute(CollectFiles.java:109)
      	at org.jboss.as.jdr.JdrRunner.collect(JdrRunner.java:130)
      	at org.jboss.as.jdr.JdrReportService.collect(JdrReportService.java:95)
      	at org.jboss.as.jdr.JdrReportRequestHandler$1.execute(JdrReportRequestHandler.java:74)
      

      Example of a file containing a DOCTYPE declaration:

      $ cat jboss-eap-7.4/standalone/configuration/web.xml 
      <!DOCTYPE web-app PUBLIC
       "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
       "http://java.sun.com/dtd/web-app_2_3.dtd">
      <web-app>
      </web-app>
      

              Unassigned Unassigned
              rhn-support-nagetsum Norito Agetsuma
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated: