You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xmlbeans.apache.org by Mark Swanson <ma...@ScheduleWorld.com> on 2005/03/20 02:02:44 UTC

bug: fails to work with Java Web Start (unsigned)

Hello,

There is a problem with the way XmlBeans uses properties and it prevents 
me from using XmlBeans in Java applications that use a SecurityManager.

For example, XmlBeans tries to read the system property:
org.apache.xmlbeans.impl.debug

Secure Java environments do not allow this, as shown here:

Caused by: java.security.AccessControlException: access denied 
(java.util.PropertyPermission org.apache.xmlbeans.impl.debug read)
	at 
java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
	at 
java.security.AccessController.checkPermission(AccessController.java:427)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
	at java.lang.System.getProperty(System.java:661)
	at 
org.apache.xmlbeans.impl.common.XBeanDebug.initializeBitsFromProperty(XBeanDebug.java:36)
	at org.apache.xmlbeans.impl.common.XBeanDebug.<clinit>(XBeanDebug.java:29)

The proper way to deal with properties (IMHO) is to allow the user to 
pass in a Properties object instead of relying on System values. This 
way the developer can pass in the System.getProperties() or Properties 
from some other mechanism.

Or, perhaps in the absense of setting your own properties object, always 
fall back to the System properties. This would allow current code to 
keep working and offer the path of least resistance to new users.

I would have fixed this and supplied a patch but svn seems to be down at 
Apache:

 > svn co http://svn.apache.org/repos/asf/xmlbeans/trunk/
svn: PROPFIND request failed on '/repos/asf/xmlbeans/trunk'
svn: PROPFIND of '/repos/asf/xmlbeans/trunk': could not connect to 
server (http://svn.apache.org)

ViewSVN/CVS also seems to be down.

Without a fix it is impossible for me to use XmlBeans (and I would 
really like to).

Cheers.

P.S. If someone would be so kind as to email me an archive of the latest 
SVN I would be able to provide a patch quicker. (I'm a little anxious.)

Thank you.

-- 
Free replacement for Exchange and Outlook (Contacts and Calendar)
http://www.ScheduleWorld.com/
WAP: http://www.ScheduleWorld.com/sw/WAPToday?id=4000&tz=EST
WebDAV: http://www.ScheduleWorld.com/sw/webDAVDir/4000.ics
VFREEBUSY: http://www.ScheduleWorld.com/sw/freebusy/4000.ifb

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org


PATCH: Fix incorrect System.getProperty() behaviour

Posted by Mark Swanson <ma...@ScheduleWorld.com>.
This patch works for me. I created a single file: SystemProperties.java. 
All code that used to call System.getProperty() now calls 
SystemProperties.getProperty().

By default (and if possible) SystemProperties contains 
System.getProperty() so no one should notice anything. However, this 
class enables folks like me to use XmlBeans in a secure environment.

I really like XmlBeans and I've been using it successfully in production 
environments for some time. I'm sure other folks will want to use 
XmlBeans within secure applications and will also benefit from this patch.

Please consider it.
Comments welcome.

Cheers.


Index: src/xmlcomp/org/apache/xmlbeans/impl/tool/CodeGenUtil.java
===================================================================
--- src/xmlcomp/org/apache/xmlbeans/impl/tool/CodeGenUtil.java 
(revision 158290)
+++ src/xmlcomp/org/apache/xmlbeans/impl/tool/CodeGenUtil.java  (working 
copy)
@@ -15,6 +15,8 @@

  package org.apache.xmlbeans.impl.tool;

+import org.apache.xmlbeans.impl.common.SystemProperties;
+
  import java.util.ArrayList;
  import java.util.List;
  import java.util.Iterator;
@@ -268,7 +270,7 @@
      public static File[] systemClasspath()
      {
          List cp = new ArrayList();
-        String[] systemcp = 
System.getProperty("java.class.path").split(File.pathSeparator);
+        String[] systemcp = 
SystemProperties.getProperty("java.class.path").split(File.pathSeparator);
          for (int i = 0; i < systemcp.length; i++)
          {
              cp.add(new File(systemcp[i]));
@@ -364,7 +366,7 @@
              return result;
          }

-        String home = System.getProperty("java.home");
+        String home = SystemProperties.getProperty("java.home");

          String sep  = File.separator;
          result = new File(home + sep + ".." + sep + "bin", tool);
Index: src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java
===================================================================
--- src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java 
(revision 158290)
+++ src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java 
(working copy)
@@ -18,6 +18,7 @@
  import org.apache.xmlbeans.SchemaType;
  import org.apache.xmlbeans.SchemaTypeSystem;
  import org.apache.xmlbeans.impl.common.IOUtil;
+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.impl.common.XmlErrorWatcher;
  import org.apache.xmlbeans.impl.schema.SchemaTypeCodePrinter;
  import org.apache.xmlbeans.impl.schema.SchemaTypeSystemCompiler;
@@ -102,7 +103,7 @@
  // Some beta builds of JDK1.5 are having troubles creating temp 
directories
  // if the java.io.tmpdir doesn't exist.  This seems to help.
  try {
-  File tmpDirFile = new File(System.getProperty("java.io.tmpdir"));
+  File tmpDirFile = new 
File(SystemProperties.getProperty("java.io.tmpdir"));
    tmpDirFile.mkdirs();
  } catch(Exception e) { e.printStackTrace(); }

Index: src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java
===================================================================
--- src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java (revision 158290)
+++ src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java (working copy)
@@ -15,6 +15,7 @@

  package org.apache.xmlbeans.impl.tool;

+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl;

  import java.io.*;
@@ -275,7 +276,7 @@

      private static boolean isDiffIndex()
      {
-        String prop = System.getProperty("xmlbeans.diff.diffIndex");
+        String prop = 
SystemProperties.getProperty("xmlbeans.diff.diffIndex");
          if (prop == null)
              return true;
          if ("0".equals(prop) || "false".equalsIgnoreCase(prop))
Index: src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java
===================================================================
--- src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java 
(revision 158290)
+++ src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java   (working 
copy)
@@ -15,6 +15,7 @@

  package org.apache.xmlbeans.impl.tool;

+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.impl.xb.ltgfmt.TestsDocument;
  import org.apache.xmlbeans.impl.xb.ltgfmt.FileDesc;
  import org.apache.xmlbeans.XmlOptions;
@@ -178,7 +179,7 @@

          // Launch results
          System.out.println("Results output to " + resultsFile);
-        if 
(System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0)
+        if 
(SystemProperties.getProperty("os.name").toLowerCase().indexOf("windows") 
 >= 0)
              Runtime.getRuntime().exec("cmd /c start iexplore \"" + 
resultsFile.getAbsolutePath() + "\"");
          else
              Runtime.getRuntime().exec("mozilla file://" + 
resultsFile.getAbsolutePath());
Index: src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
===================================================================
--- src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java 
(revision 158290)
+++ src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java 
(working copy)
@@ -27,6 +27,7 @@
  import org.apache.xmlbeans.ResourceLoader;
  import org.apache.xmlbeans.impl.common.IOUtil;
  import org.apache.xmlbeans.impl.common.ResolverUtil;
+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.impl.common.XmlErrorPrinter;
  import org.apache.xmlbeans.impl.common.XmlErrorWatcher;
  import org.apache.xmlbeans.impl.schema.PathResourceLoader;
@@ -1049,7 +1050,7 @@

          // Calculate the usenames based on the relativized filenames 
on the filesystem
          if (baseDir == null)
-            baseDir = new File(System.getProperty("user.dir"));
+            baseDir = new File(SystemProperties.getProperty("user.dir"));

          ResourceLoader cpResourceLoader = null;

Index: src/common/org/apache/xmlbeans/impl/common/ResolverUtil.java
===================================================================
--- src/common/org/apache/xmlbeans/impl/common/ResolverUtil.java 
(revision 158290)
+++ src/common/org/apache/xmlbeans/impl/common/ResolverUtil.java 
(working copy)
@@ -31,7 +31,7 @@
      {
          try
          {
-            Object o = 
Class.forName(System.getProperty("xmlbean.entityResolver")).newInstance();
+            Object o = 
Class.forName(SystemProperties.getProperty("xmlbean.entityResolver")).newInstance();
              _entityResolver = (EntityResolver)o;
          }
          catch (Exception e)
Index: src/common/org/apache/xmlbeans/impl/common/XBeanDebug.java
===================================================================
--- src/common/org/apache/xmlbeans/impl/common/XBeanDebug.java 
(revision 158290)
+++ src/common/org/apache/xmlbeans/impl/common/XBeanDebug.java  (working 
copy)
@@ -33,7 +33,7 @@
      private static int initializeBitsFromProperty()
      {
          int bits = 0;
-        String prop = System.getProperty(traceProp, defaultProp);
+        String prop = SystemProperties.getProperty(traceProp, defaultProp);
          if (prop.indexOf("TRACE_SCHEMA_LOADING") >= 0)
              bits |= TRACE_SCHEMA_LOADING;
          return bits;
Index: 
src/xmlinputstream/org/apache/xmlbeans/xml/stream/utils/NestedThrowable.java
===================================================================
--- 
src/xmlinputstream/org/apache/xmlbeans/xml/stream/utils/NestedThrowable.java(revision 
158290)
+++ 
src/xmlinputstream/org/apache/xmlbeans/xml/stream/utils/NestedThrowable.java(working 
copy)
@@ -28,6 +28,8 @@
  import java.io.PrintStream;
  import java.lang.reflect.InvocationTargetException;

+import org.apache.xmlbeans.impl.common.SystemProperties;
+
  public interface NestedThrowable {

    /** Get the nested Throwable. */
@@ -44,7 +46,7 @@

    static class Util {

-    private static String EOL = System.getProperty("line.separator");
+    private static String EOL = 
SystemProperties.getProperty("line.separator");

      /**
       * Prints the exception message and its nested exception message.
Index: src/store/org/apache/xmlbeans/impl/store/Saver.java
===================================================================
--- src/store/org/apache/xmlbeans/impl/store/Saver.java (revision 158290)
+++ src/store/org/apache/xmlbeans/impl/store/Saver.java (working copy)
@@ -22,6 +22,7 @@

  import org.apache.xmlbeans.impl.common.QNameHelper;
  import org.apache.xmlbeans.impl.common.EncodingMap;
+import org.apache.xmlbeans.impl.common.SystemProperties;

  import java.io.Writer;
  import java.io.Reader;
@@ -2949,7 +2950,7 @@
      private String    _initialDefaultUri;

      static final String _newLine =
-        System.getProperty( "line.separator" ) == null
+        SystemProperties.getProperty( "line.separator" ) == null
              ? "\n"
-            : System.getProperty( "line.separator" );
-}
\ No newline at end of file
+            : SystemProperties.getProperty( "line.separator" );
+}
Index: src/xmlpublic/org/apache/xmlbeans/XmlCalendar.java
===================================================================
--- src/xmlpublic/org/apache/xmlbeans/XmlCalendar.java  (revision 158290)
+++ src/xmlpublic/org/apache/xmlbeans/XmlCalendar.java  (working copy)
@@ -15,6 +15,8 @@

  package org.apache.xmlbeans;

+import org.apache.xmlbeans.impl.common.SystemProperties;
+
  import java.util.GregorianCalendar;
  import java.util.Calendar;
  import java.util.Date;
@@ -261,7 +263,7 @@
          {
              try
              {
-                String yearstring = System.getProperty("user.defaultyear");
+                String yearstring = 
SystemProperties.getProperty("user.defaultyear");
                  if (yearstring != null)
                      defaultYear = Integer.parseInt(yearstring);
                  else
Index: src/typeimpl/org/apache/xmlbeans/impl/schema/StscState.java
===================================================================
--- src/typeimpl/org/apache/xmlbeans/impl/schema/StscState.java 
(revision 158290)
+++ src/typeimpl/org/apache/xmlbeans/impl/schema/StscState.java (working 
copy)
@@ -18,6 +18,7 @@
  import org.apache.xmlbeans.XmlErrorCodes;
  import org.apache.xmlbeans.impl.common.QNameHelper;
  import org.apache.xmlbeans.impl.common.ResolverUtil;
+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.XmlObject;
  import org.apache.xmlbeans.SchemaGlobalElement;
  import org.apache.xmlbeans.SchemaComponent;
@@ -512,13 +513,13 @@

          _compatMap = 
(Map)options.get(XmlOptions.COMPILE_SUBSTITUTE_NAMES);
          _noUpa = options.hasOption(XmlOptions.COMPILE_NO_UPA_RULE) ? 
true :
- 
!"true".equals(System.getProperty("xmlbean.uniqueparticleattribution", 
"true"));
+ 
!"true".equals(SystemProperties.getProperty("xmlbean.uniqueparticleattribution", 
"true"));
          _noPvr = options.hasOption(XmlOptions.COMPILE_NO_PVR_RULE) ? 
true :
- 
!"true".equals(System.getProperty("xmlbean.particlerestriction", "true"));
+ 
!"true".equals(SystemProperties.getProperty("xmlbean.particlerestriction", 
"true"));
          _noAnn = options.hasOption(XmlOptions.COMPILE_NO_ANNOTATIONS) 
? true :
- 
!"true".equals(System.getProperty("xmlbean.schemaannotations", "true"));
+ 
!"true".equals(SystemProperties.getProperty("xmlbean.schemaannotations", 
"true"));
          _doingDownloads = 
options.hasOption(XmlOptions.COMPILE_DOWNLOAD_URLS) ? true :
- 
"true".equals(System.getProperty("xmlbean.downloadurls", "false"));
+ 
"true".equals(SystemProperties.getProperty("xmlbean.downloadurls", 
"false"));
          _entityResolver = 
(EntityResolver)options.get(XmlOptions.ENTITY_RESOLVER);

          if (_entityResolver == null)
Index: 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
===================================================================
--- 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java 
    (revision 158290)
+++ 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java 
    (working copy)
@@ -42,6 +42,7 @@
  import org.apache.xmlbeans.ResourceLoader;
  import org.apache.xmlbeans.impl.common.NameUtil;
  import org.apache.xmlbeans.impl.common.QNameHelper;
+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.impl.common.XBeanDebug;
  import org.apache.xmlbeans.impl.util.HexBin;
  import org.apache.xmlbeans.impl.values.XmlObjectBase;
@@ -858,7 +859,7 @@
                  String[] props = new String[] { "user.name", 
"user.dir", "user.timezone", "user.country", "java.class.path", 
"java.home", "java.vendor", "java.version", "os.version" };
                  for (int i = 0; i < props.length; i++)
                  {
-                    String prop = System.getProperty(props[i]);
+                    String prop = SystemProperties.getProperty(props[i]);
                      if (prop != null)
                      {
                          daos.writeUTF(prop);
Index: 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
===================================================================
--- 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java 
    (revision 158290)
+++ 
src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java 
    (working copy)
@@ -28,6 +28,7 @@

  import javax.xml.namespace.QName;
  import org.apache.xmlbeans.impl.common.NameUtil;
+import org.apache.xmlbeans.impl.common.SystemProperties;
  import org.apache.xmlbeans.PrePostExtension;
  import org.apache.xmlbeans.InterfaceExtension;
  import org.apache.xmlbeans.SchemaType;
@@ -49,9 +50,9 @@


      static final String LINE_SEPARATOR =
-        System.getProperty("line.separator") == null
+        SystemProperties.getProperty("line.separator") == null
              ? "\n"
-            : System.getProperty("line.separator");
+            : SystemProperties.getProperty("line.separator");

      static final String MAX_SPACES = " 
         ";
      static final int INDENT_INCREMENT = 4;
Index: src/saaj_api/javax/xml/soap/FactoryFinder.java
===================================================================
--- src/saaj_api/javax/xml/soap/FactoryFinder.java      (revision 158290)
+++ src/saaj_api/javax/xml/soap/FactoryFinder.java      (working copy)
@@ -22,6 +22,7 @@
  import java.io.InputStreamReader;

  import java.util.Properties;
+import org.apache.xmlbeans.impl.common.SystemProperties;

  /**
   * This class is used to locate factory classes for javax.xml.soap.
@@ -76,14 +77,14 @@
       */
      static Object find(String factoryPropertyName, String 
defaultFactoryClassName) throws SOAPException {
          try {
-            String factoryClassName = 
System.getProperty(factoryPropertyName);
+            String factoryClassName = 
SystemProperties.getProperty(factoryPropertyName);
              if (factoryClassName != null) {
                  return newInstance(factoryClassName);
              }
          } catch (SecurityException securityexception) {}

          try {
-            String propertiesFileName = System.getProperty("java.home")
+            String propertiesFileName = 
SystemProperties.getProperty("java.home")
                                          + File.separator + "lib"
                                          + File.separator + 
"jaxm.properties";
              File file = new File(propertiesFileName);
Index: build.xml
===================================================================
--- build.xml   (revision 158290)
+++ build.xml   (working copy)
@@ -454,7 +454,11 @@
          <javac srcdir="src/xmlinputstream"
              source="${javac.source}" target="${javac.target}"
              destdir="build/classes/xmlinputstream"
-            debug="on"/>
+            debug="on">
+            <classpath>
+                <pathelement location="build/classes/common"/>
+            </classpath>
+               </javac>
      </target>

      <!-- xmlpublic target 
============================================== -->
@@ -464,6 +468,7 @@
          <javac srcdir="src/xmlpublic" 
destdir="build/classes/xmlpublic" source="${javac.source}" 
target="${javac.target}" debug="on">
              <classpath>
                  <pathelement location="build/classes/xmlinputstream"/>
+                <pathelement location="build/classes/common"/>
                  <pathelement location="build/lib/jsr173_api.jar"/>
              </classpath>
          </javac>
@@ -644,6 +649,7 @@
          <mkdir dir="build/classes/saaj_api"/>
          <javac srcdir="src/saaj_api" destdir="build/classes/saaj_api" 
source="${javac.source}" target="${javac.target}" debug="on">
              <classpath id="saaj_api.compile.path">
+                <pathelement location="build/classes/common"/>
              </classpath>
          </javac>



-- 
Free replacement for Exchange and Outlook (Contacts and Calendar)
http://www.ScheduleWorld.com/
WAP: http://www.ScheduleWorld.com/sw/WAPToday?id=4000&tz=EST
WebDAV: http://www.ScheduleWorld.com/sw/webDAVDir/4000.ics
VFREEBUSY: http://www.ScheduleWorld.com/sw/freebusy/4000.ifb

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org


Re: bug: fails to work with Java Web Start (unsigned)

Posted by Mark Swanson <ma...@ScheduleWorld.com>.
> P.S. If someone would be so kind as to email me an archive of the latest 
> SVN I would be able to provide a patch quicker. (I'm a little anxious.)

OK, nevermind - SVN is back up.

Cheers.

-- 
Free replacement for Exchange and Outlook (Contacts and Calendar)
http://www.ScheduleWorld.com/
WAP: http://www.ScheduleWorld.com/sw/WAPToday?id=4000&tz=EST
WebDAV: http://www.ScheduleWorld.com/sw/webDAVDir/4000.ics
VFREEBUSY: http://www.ScheduleWorld.com/sw/freebusy/4000.ifb

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org