Changeset 1729 for trunk/docx4j/src
- Timestamp:
- 12/12/11 10:54:13 (5 months ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j/jaxb
- Files:
-
- 2 edited
-
Context.java (modified) (1 diff)
-
NamespacePrefixMapperUtils.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/jaxb/Context.java
r1726 r1729 50 50 51 51 // Display diagnostic info about version of JAXB being used. 52 try { 53 Class.forName("com.sun.xml.bind.marshaller.MinimumEscapeHandler"); 54 log.info("JAXB: Using RI"); 55 56 } catch (ClassNotFoundException cnfe) { 57 // JAXB Reference Implementation not present 58 log.info("JAXB: RI not present. Trying Java 6 implementation."); 59 try { 60 Class.forName("com.sun.xml.internal.bind.marshaller.MinimumEscapeHandler"); 61 log.info("JAXB: Using Java 6 implementation."); 62 } catch (ClassNotFoundException e) { 63 log.info("JAXB: neither Reference Implementation nor Java 6 implementation present?"); 64 } 65 } 52 Object namespacePrefixMapper; 53 try { 54 namespacePrefixMapper = NamespacePrefixMapperUtils.getPrefixMapper(); 55 if ( namespacePrefixMapper.getClass().getName().equals("org.docx4j.jaxb.NamespacePrefixMapperSunInternal") ) { 56 // Java 6 57 log.info("Using Java 6/7 JAXB implementation"); 58 } else { 59 log.info("Using JAXB Reference Implementation"); 60 } 61 } catch (JAXBException e) { 62 log.error("PANIC! No suitable JAXB implementation available"); 63 e.printStackTrace(); 64 } 66 65 67 66 try { -
trunk/docx4j/src/main/java/org/docx4j/jaxb/NamespacePrefixMapperUtils.java
r1655 r1729 1 1 package org.docx4j.jaxb; 2 2 3 import javax.xml.bind.JAXBContext; 3 4 import javax.xml.bind.JAXBException; 4 5 import javax.xml.bind.Marshaller; … … 27 28 */ 28 29 30 private static JAXBContext testContext; 31 32 private static Object prefixMapper; 33 private static Object prefixMapperRels; 34 29 35 30 36 public static Object getPrefixMapper() throws JAXBException { 31 37 32 Class c; 33 try { 34 c = Class.forName("com.sun.xml.bind.marshaller.MinimumEscapeHandler"); 35 return new NamespacePrefixMapper(); // JAXB Reference Implementation 36 } catch (ClassNotFoundException cnfe) { 37 // JAXB Reference Implementation not present 38 // Use Java 6 implementation 39 log.debug("JAXB RI (com.sun.xml.bind.marshaller.MinimumEscapeHandler) not present. Trying Java 6 implementation."); 40 try { 41 c = Class.forName("com.sun.xml.internal.bind.marshaller.MinimumEscapeHandler"); 42 } catch (ClassNotFoundException e) { 43 e.printStackTrace(); 44 log.error("JAXB: neither Reference Implementation nor Java 6 implementation present?", e); 38 if (prefixMapper!=null) return prefixMapper; 39 40 if (testContext==null) { 41 42 // JBOSS might use a different class loader to load JAXBContext, which causes problems, 43 // so explicitly specify our class loader. 44 NamespacePrefixMapperUtils tmp = new NamespacePrefixMapperUtils(); 45 java.lang.ClassLoader classLoader = tmp.getClass().getClassLoader(); 46 47 testContext = JAXBContext.newInstance("org.docx4j.relationships",classLoader ); 48 } 49 50 Marshaller m=testContext.createMarshaller(); 51 try { 52 // Assume use of Java 6 implementation (ie not RI) 53 m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", 54 new NamespacePrefixMapperSunInternal() ); 55 log.info("Using NamespacePrefixMapperSunInternal, which is suitable for Java 6"); 56 prefixMapper = new NamespacePrefixMapperSunInternal(); 57 return prefixMapper; 58 } catch (java.lang.NoClassDefFoundError notJava6) { 59 // javax.xml.bind.PropertyException 60 log.error(notJava6.getMessage() + " .. trying RI."); 61 try { 62 // Try RI suitable one 63 m.setProperty("com.sun.xml.bind.namespacePrefixMapper", 64 new NamespacePrefixMapper() ); 65 log.info("Using NamespacePrefixMapper, which is suitable for the JAXB RI"); 66 prefixMapper = new NamespacePrefixMapper(); 67 return prefixMapper; 68 } catch (javax.xml.bind.PropertyException notRIEither) { 69 notRIEither.printStackTrace(); 70 log.error("JAXB: neither Reference Implementation nor Java 6 implementation present?", notRIEither); 45 71 throw new JAXBException("JAXB: neither Reference Implementation nor Java 6 implementation present?"); 46 72 } 47 return new NamespacePrefixMapperSunInternal(); 48 }73 74 } 49 75 } 50 76 51 77 52 78 public static Object getPrefixMapperRelationshipsPart() throws JAXBException { 79 80 if (prefixMapperRels!=null) return prefixMapperRels; 81 if (testContext==null) { 82 83 // JBOSS might use a different class loader to load JAXBContext, which causes problems, 84 // so explicitly specify our class loader. 85 NamespacePrefixMapperUtils tmp = new NamespacePrefixMapperUtils(); 86 java.lang.ClassLoader classLoader = tmp.getClass().getClassLoader(); 87 88 testContext = JAXBContext.newInstance("org.docx4j.relationships",classLoader ); 89 } 53 90 54 Class c; 55 try { 56 c = Class.forName("com.sun.xml.bind.marshaller.MinimumEscapeHandler"); 57 return new NamespacePrefixMapperRelationshipsPart(); 58 } catch (ClassNotFoundException cnfe) { 59 // JAXB Reference Implementation not present 60 log.debug("JAXB RI (com.sun.xml.bind.marshaller.MinimumEscapeHandler) not present. Trying Java 6 implementation."); 61 try { 62 c = Class.forName("com.sun.xml.internal.bind.marshaller.MinimumEscapeHandler"); 63 } catch (ClassNotFoundException e) { 64 e.printStackTrace(); 65 log.error("JAXB: neither Reference Implementation nor Java 6 implementation present?", e); 91 Marshaller m=testContext.createMarshaller(); 92 try { 93 // Assume use of Java 6 implementation (ie not RI) 94 m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", 95 new NamespacePrefixMapperRelationshipsPartSunInternal() ); 96 log.info("Using NamespacePrefixMapperSunInternal, which is suitable for Java 6"); 97 prefixMapperRels = new NamespacePrefixMapperRelationshipsPartSunInternal(); 98 return prefixMapperRels; 99 } catch (java.lang.NoClassDefFoundError notJava6) { 100 // javax.xml.bind.PropertyException 101 log.error(notJava6.getMessage() + " .. trying RI."); 102 try { 103 // Try RI suitable one 104 m.setProperty("com.sun.xml.bind.namespacePrefixMapper", 105 new NamespacePrefixMapperRelationshipsPart() ); 106 log.info("Using NamespacePrefixMapperRelationshipsPart, which is suitable for the JAXB RI"); 107 prefixMapperRels = new NamespacePrefixMapperRelationshipsPart(); 108 return prefixMapperRels; 109 } catch (javax.xml.bind.PropertyException notRIEither) { 110 notRIEither.printStackTrace(); 111 log.error("JAXB: neither Reference Implementation nor Java 6 implementation present?", notRIEither); 66 112 throw new JAXBException("JAXB: neither Reference Implementation nor Java 6 implementation present?"); 67 113 } 68 return new NamespacePrefixMapperRelationshipsPartSunInternal(); 69 } 114 115 } 70 116 } 71 117
Note: See TracChangeset
for help on using the changeset viewer.
