Changeset 1605 for trunk/docx4j/src/main/java
- Timestamp:
- 07/09/11 08:46:46 (11 months ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j
- Files:
-
- 2 added
- 2 edited
-
jaxb/JaxbValidationEventHandler.java (modified) (3 diffs)
-
jaxb/mc-preprocessor.xslt (added)
-
openpackaging/parts/WordprocessingML/MainDocumentPart.java (modified) (3 diffs)
-
utils/XSLTUtils.java (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/jaxb/JaxbValidationEventHandler.java
r973 r1605 21 21 package org.docx4j.jaxb; 22 22 23 import java.io.IOException; 24 23 25 import javax.xml.bind.ValidationEvent; 24 26 import javax.xml.bind.ValidationEventHandler; 25 27 import javax.xml.bind.ValidationEventLocator; 28 import javax.xml.transform.Source; 29 import javax.xml.transform.Templates; 30 import javax.xml.transform.TransformerConfigurationException; 31 import javax.xml.transform.stream.StreamSource; 26 32 27 33 import org.apache.log4j.Logger; 34 import org.docx4j.XmlUtils; 28 35 29 36 … … 33 40 private static Logger log = Logger.getLogger(JaxbValidationEventHandler.class); 34 41 42 private boolean shouldContinue = true; 43 public void setContinue(boolean val) { 44 shouldContinue = val; 45 } 46 47 public final static String UNEXPECTED_MC_ALTERNATE_CONTENT = "unexpected element (uri:\"http://schemas.openxmlformats.org/markup-compatibility/2006\", local:\"AlternateContent\")"; 48 49 static Templates mcPreprocessorXslt; 50 51 public static Templates getMcPreprocessor() throws IOException, TransformerConfigurationException { 52 53 if (mcPreprocessorXslt==null) { 54 try { 55 Source xsltSource = new StreamSource( 56 org.docx4j.utils.ResourceUtils.getResource( 57 "org/docx4j/jaxb/mc-preprocessor.xslt")); 58 mcPreprocessorXslt = XmlUtils.getTransformerTemplate(xsltSource); 59 } catch (IOException e) { 60 log.error(e); 61 throw(e); 62 } catch (TransformerConfigurationException e) { 63 log.error(e); 64 throw(e); 65 } 66 } 67 68 return mcPreprocessorXslt; 69 70 } 35 71 36 72 public boolean handleEvent(ValidationEvent ve) { … … 69 105 // (Marshalling, Unmarshalling, Validating) 70 106 log.info("continuing (with possible element/attribute loss)"); 71 return true;107 return shouldContinue; 72 108 73 109 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/MainDocumentPart.java
r1505 r1605 33 33 import javax.xml.bind.JAXBElement; 34 34 import javax.xml.bind.JAXBException; 35 import javax.xml.bind.UnmarshalException; 35 36 import javax.xml.bind.Unmarshaller; 37 import javax.xml.bind.util.JAXBResult; 36 38 import javax.xml.parsers.DocumentBuilderFactory; 39 import javax.xml.transform.Result; 40 import javax.xml.transform.Templates; 41 import javax.xml.transform.dom.DOMResult; 37 42 38 43 import org.apache.log4j.Logger; … … 42 47 import org.docx4j.dml.CTNonVisualDrawingProps; 43 48 import org.docx4j.jaxb.Context; 49 import org.docx4j.jaxb.JaxbValidationEventHandler; 44 50 import org.docx4j.model.PropertyResolver; 45 51 import org.docx4j.model.listnumbering.AbstractListNumberingDefinition; … … 269 275 binder = jc.createBinder(); 270 276 271 binder.setEventHandler( 272 new org.docx4j.jaxb.JaxbValidationEventHandler()); 273 274 jaxbElement = (org.docx4j.wml.Document) binder.unmarshal( doc ); 277 JaxbValidationEventHandler eventHandler = new JaxbValidationEventHandler(); 278 eventHandler.setContinue(false); 279 binder.setEventHandler(eventHandler); 280 281 try { 282 jaxbElement = (org.docx4j.wml.Document) binder.unmarshal( doc ); 283 } catch (UnmarshalException ue) { 284 285 // mimic docx4j 2.7.0 and earlier behaviour 286 eventHandler.setContinue(true); 287 288 if (ue.getMessage().contains(JaxbValidationEventHandler.UNEXPECTED_MC_ALTERNATE_CONTENT)) { 289 // Try our preprocessor 290 log.info("encountered mc:AlternateContent; pre-processing"); 291 292 // There is no JAXBResult(binder), 293 // so use a 294 DOMResult result = new DOMResult(); 295 296 Templates mcPreprocessorXslt = JaxbValidationEventHandler.getMcPreprocessor(); 297 XmlUtils.transform(doc, mcPreprocessorXslt, null, result); 298 299 doc = (org.w3c.dom.Document)result.getNode(); 300 301 } else { 302 log.error(ue); 303 log.info("trying again; likely attribute/element loss"); 304 } 305 jaxbElement = (org.docx4j.wml.Document) binder.unmarshal( doc ); 306 307 } 275 308 276 309 return jaxbElement;
Note: See TracChangeset
for help on using the changeset viewer.
