You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2017/04/03 09:22:49 UTC
[1/3] polygene-java git commit: javax.json serialization allows to
set provider properties at assembly
Repository: polygene-java
Updated Branches:
refs/heads/develop 5296c3551 -> 30acba2eb
javax.json serialization allows to set provider properties at assembly
Default is to ignore comments when using Johnzon
POLYGENE-238
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/40ae69a5
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/40ae69a5
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/40ae69a5
Branch: refs/heads/develop
Commit: 40ae69a596d4fdc4c138d3a452f73ebb77f78a9e
Parents: 5296c35
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Apr 3 10:18:08 2017 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Apr 3 10:18:08 2017 +0200
----------------------------------------------------------------------
.../javaxjson/JavaxJsonFactories.java | 15 ++++-------
.../javaxjson/JavaxJsonSettings.java | 28 ++++++++++++++++++++
2 files changed, 33 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/40ae69a5/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonFactories.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonFactories.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonFactories.java
index 99893bd..de5c79b 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonFactories.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonFactories.java
@@ -17,14 +17,11 @@
*/
package org.apache.polygene.serialization.javaxjson;
-import java.util.Collections;
-import java.util.Map;
import javax.json.JsonBuilderFactory;
import javax.json.JsonException;
import javax.json.JsonReaderFactory;
import javax.json.JsonWriterFactory;
import javax.json.spi.JsonProvider;
-import javax.json.stream.JsonGenerator;
import javax.json.stream.JsonGeneratorFactory;
import javax.json.stream.JsonParserFactory;
import org.apache.polygene.api.injection.scope.Uses;
@@ -84,14 +81,12 @@ public interface JavaxJsonFactories
}
}
- Map<String, ?> parserProperties = Collections.singletonMap( "org.apache.johnzon.supports-comments", true );
- parserFactory = jsonProvider.createParserFactory( parserProperties );
- readerFactory = jsonProvider.createReaderFactory( parserProperties );
+ parserFactory = jsonProvider.createParserFactory( settings.getJsonParserProperties() );
+ readerFactory = jsonProvider.createReaderFactory( settings.getJsonParserProperties() );
- Map<String, ?> generatorProperties = Collections.emptyMap();
- generatorFactory = jsonProvider.createGeneratorFactory( generatorProperties );
- builderFactory = jsonProvider.createBuilderFactory( generatorProperties );
- writerFactory = jsonProvider.createWriterFactory( generatorProperties );
+ generatorFactory = jsonProvider.createGeneratorFactory( settings.getJsonGeneratorProperties() );
+ builderFactory = jsonProvider.createBuilderFactory( settings.getJsonGeneratorProperties() );
+ writerFactory = jsonProvider.createWriterFactory( settings.getJsonGeneratorProperties() );
}
@Override
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/40ae69a5/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
index de5c27f..e19392e 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
@@ -17,6 +17,7 @@
*/
package org.apache.polygene.serialization.javaxjson;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.polygene.api.type.ValueType;
@@ -32,11 +33,18 @@ public class JavaxJsonSettings extends SerializationSettings<JavaxJsonSettings>
}
private String jsonProviderClassName;
+ private Map<String, Object> jsonParserProperties;
+ private Map<String, Object> jsonGeneratorProperties;
private String typeInfoPropertyName;
private Map<ValueType, JavaxJsonAdapter<?>> adapters;
public JavaxJsonSettings()
{
+ jsonParserProperties = new HashMap<String, Object>()
+ {{
+ put( "org.apache.johnzon.supports-comments", true );
+ }};
+ jsonGeneratorProperties = new HashMap<>();
typeInfoPropertyName = "_type";
adapters = new LinkedHashMap<>();
}
@@ -51,6 +59,26 @@ public class JavaxJsonSettings extends SerializationSettings<JavaxJsonSettings>
this.jsonProviderClassName = jsonProviderClassName;
}
+ public Map<String, Object> getJsonParserProperties()
+ {
+ return jsonParserProperties;
+ }
+
+ public void setJsonParserProperties( Map<String, Object> jsonParserProperties )
+ {
+ this.jsonParserProperties = jsonParserProperties;
+ }
+
+ public Map<String, Object> getJsonGeneratorProperties()
+ {
+ return jsonGeneratorProperties;
+ }
+
+ public void setJsonGeneratorProperties( Map<String, Object> jsonGeneratorProperties )
+ {
+ this.jsonGeneratorProperties = jsonGeneratorProperties;
+ }
+
public String getTypeInfoPropertyName()
{
return typeInfoPropertyName;
[2/3] polygene-java git commit: Fix silly mistake in
JavaxJsonCollectionSerializationTest
Posted by pa...@apache.org.
Fix silly mistake in JavaxJsonCollectionSerializationTest
POLYGENE-231
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/151e0207
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/151e0207
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/151e0207
Branch: refs/heads/develop
Commit: 151e0207178ca8e8511750e85087509a5483dcc9
Parents: 40ae69a
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Apr 3 10:24:27 2017 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Apr 3 10:24:27 2017 +0200
----------------------------------------------------------------------
.../javaxjson/JavaxJsonCollectionSerializationTest.java | 4 ----
1 file changed, 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/151e0207/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonCollectionSerializationTest.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonCollectionSerializationTest.java b/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonCollectionSerializationTest.java
index 0df54dc..e6beebd 100644
--- a/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonCollectionSerializationTest.java
+++ b/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonCollectionSerializationTest.java
@@ -149,10 +149,6 @@ public class JavaxJsonCollectionSerializationTest extends AbstractCollectionSeri
assertThat( fooEntry.getString( "value" ), equalTo( "bar" ) );
assertThat( bazEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "baz" ) );
assertThat( bazEntry.getString( "value" ), equalTo( "bazar" ) );
-
- MapType mapType = MapType.of( ValueType.OBJECT, ValueType.STRING );
- Map<Object, String> map2 = jsonSerialization.fromJson( module, mapType, json );
- assertThat( map2, equalTo( map ) );
}
@Test
[3/3] polygene-java git commit: Tighten XML subsystem setup
Posted by pa...@apache.org.
Tighten XML subsystem setup
Move all XML subsystem setup into JavaxXmlFactories.
Prevent all network requests from XML parsing.
Enable secure XML processing.
POLYGENE-239
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/30acba2e
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/30acba2e
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/30acba2e
Branch: refs/heads/develop
Commit: 30acba2eb85b35eff9b8e953e73d39eb08472d01
Parents: 151e020
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Apr 3 11:22:40 2017 +0200
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Apr 3 11:22:40 2017 +0200
----------------------------------------------------------------------
.../javaxxml/JavaxXmlDeserializer.java | 16 +--
.../javaxxml/JavaxXmlFactories.java | 105 ++++++++++++++++---
.../javaxxml/JavaxXmlSerializer.java | 35 ++-----
3 files changed, 101 insertions(+), 55 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/30acba2e/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
index dcadbd1..9acdfe0 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
@@ -17,7 +17,6 @@
*/
package org.apache.polygene.serialization.javaxxml;
-import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Array;
import java.util.ArrayList;
@@ -35,8 +34,6 @@ import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.stream.StreamSource;
@@ -89,21 +86,10 @@ public class JavaxXmlDeserializer extends AbstractTextDeserializer
private JavaxXmlSettings settings;
- private Transformer normalizingTransformer;
-
@Override
public void initialize() throws Exception
{
settings = JavaxXmlSettings.orDefault( descriptor.metaInfo( JavaxXmlSettings.class ) );
-
- String xslPath = "/org/apache/polygene/serialization/javaxxml/deserializer-normalization.xsl";
- InputStream xsltStream = getClass().getResourceAsStream( xslPath );
- normalizingTransformer = xmlFactories.transformerFactory()
- .newTransformer( new StreamSource( xsltStream ) );
- normalizingTransformer.setOutputProperty( OutputKeys.METHOD, "xml" );
- normalizingTransformer.setOutputProperty( OutputKeys.VERSION, "1.1" );
- normalizingTransformer.setOutputProperty( OutputKeys.STANDALONE, "yes" );
- normalizingTransformer.setOutputProperty( OutputKeys.ENCODING, UTF_8.name() );
}
@Override
@@ -112,7 +98,7 @@ public class JavaxXmlDeserializer extends AbstractTextDeserializer
try
{
DOMResult domResult = new DOMResult();
- normalizingTransformer.transform( new StreamSource( state ), domResult );
+ xmlFactories.normalizationTransformer().transform( new StreamSource( state ), domResult );
Node node = domResult.getNode();
return fromXml( module, valueType, node );
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/30acba2e/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlFactories.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlFactories.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlFactories.java
index f3a7f80..72b02fa 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlFactories.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlFactories.java
@@ -17,20 +17,38 @@
*/
package org.apache.polygene.serialization.javaxxml;
+import java.io.InputStream;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamSource;
import org.apache.polygene.api.injection.scope.Uses;
import org.apache.polygene.api.mixin.Initializable;
import org.apache.polygene.api.mixin.Mixins;
+import org.apache.polygene.api.serialization.SerializationException;
import org.apache.polygene.api.service.ServiceDescriptor;
+import org.w3c.dom.Document;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
@Mixins( JavaxXmlFactories.Mixin.class )
public interface JavaxXmlFactories
{
DocumentBuilderFactory documentBuilderFactory();
+ Document newDocumentForSerialization();
+
TransformerFactory transformerFactory();
+ Transformer serializationTransformer();
+
+ Transformer normalizationTransformer();
+
class Mixin implements JavaxXmlFactories, Initializable
{
@Uses
@@ -39,24 +57,55 @@ public interface JavaxXmlFactories
private DocumentBuilderFactory documentBuilderFactory;
private TransformerFactory transformerFactory;
+ private Transformer serializationTransformer;
+ private Transformer normalizationTransformer;
+
@Override
public void initialize()
{
JavaxXmlSettings settings = JavaxXmlSettings.orDefault( descriptor.metaInfo( JavaxXmlSettings.class ) );
- String documentBuilderFactoryClassName = settings.getDocumentBuilderFactoryClassName();
- documentBuilderFactory = documentBuilderFactoryClassName == null
- ? DocumentBuilderFactory.newInstance()
- : DocumentBuilderFactory.newInstance( documentBuilderFactoryClassName,
- getClass().getClassLoader() );
- documentBuilderFactory.setNamespaceAware( false );
- documentBuilderFactory.setIgnoringComments( true );
-
- String transformerFactoryClassName = settings.getTransformerFactoryClassName();
- transformerFactory = transformerFactoryClassName == null
- ? TransformerFactory.newInstance()
- : TransformerFactory.newInstance( transformerFactoryClassName,
- getClass().getClassLoader() );
+ try
+ {
+ String documentBuilderFactoryClassName = settings.getDocumentBuilderFactoryClassName();
+ documentBuilderFactory = documentBuilderFactoryClassName == null
+ ? DocumentBuilderFactory.newInstance()
+ : DocumentBuilderFactory.newInstance( documentBuilderFactoryClassName,
+ getClass().getClassLoader() );
+ documentBuilderFactory.setValidating( false );
+ documentBuilderFactory.setNamespaceAware( false );
+ documentBuilderFactory.setIgnoringComments( true );
+ documentBuilderFactory.setFeature( XMLConstants.FEATURE_SECURE_PROCESSING, true );
+
+ String transformerFactoryClassName = settings.getTransformerFactoryClassName();
+ transformerFactory = transformerFactoryClassName == null
+ ? TransformerFactory.newInstance()
+ : TransformerFactory.newInstance( transformerFactoryClassName,
+ getClass().getClassLoader() );
+ transformerFactory.setFeature( XMLConstants.FEATURE_SECURE_PROCESSING, true );
+ transformerFactory.setAttribute( XMLConstants.ACCESS_EXTERNAL_DTD, "" );
+ transformerFactory.setAttribute( XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "" );
+
+ serializationTransformer = transformerFactory.newTransformer();
+ serializationTransformer.setOutputProperty( OutputKeys.METHOD, "xml" );
+ serializationTransformer.setOutputProperty( OutputKeys.VERSION, "1.1" );
+ serializationTransformer.setOutputProperty( OutputKeys.STANDALONE, "yes" );
+ serializationTransformer.setOutputProperty( OutputKeys.ENCODING, UTF_8.name() );
+ serializationTransformer.setOutputProperty( OutputKeys.INDENT, "no" );
+
+ String xslPath = "/org/apache/polygene/serialization/javaxxml/deserializer-normalization.xsl";
+ InputStream xsltStream = getClass().getResourceAsStream( xslPath );
+ normalizationTransformer = transformerFactory.newTransformer( new StreamSource( xsltStream ) );
+ normalizationTransformer.setOutputProperty( OutputKeys.METHOD, "xml" );
+ normalizationTransformer.setOutputProperty( OutputKeys.VERSION, "1.1" );
+ normalizationTransformer.setOutputProperty( OutputKeys.STANDALONE, "yes" );
+ normalizationTransformer.setOutputProperty( OutputKeys.ENCODING, UTF_8.name() );
+ normalizationTransformer.setOutputProperty( OutputKeys.INDENT, "no" );
+ }
+ catch( ParserConfigurationException | TransformerConfigurationException ex )
+ {
+ throw new SerializationException( "Unable to setup the XML subsystem", ex );
+ }
}
@Override
@@ -66,9 +115,39 @@ public interface JavaxXmlFactories
}
@Override
+ public Document newDocumentForSerialization()
+ {
+ try
+ {
+ DocumentBuilder docBuilder = documentBuilderFactory.newDocumentBuilder();
+ Document doc = docBuilder.newDocument();
+ doc.setXmlVersion( "1.1" );
+ doc.setXmlStandalone( true );
+ return doc;
+ }
+ catch( ParserConfigurationException ex )
+ {
+ throw new SerializationException( "Unable to create XML document. "
+ + "Is your javax.xml subsystem correctly set up?", ex );
+ }
+ }
+
+ @Override
public TransformerFactory transformerFactory()
{
return transformerFactory;
}
+
+ @Override
+ public Transformer serializationTransformer()
+ {
+ return serializationTransformer;
+ }
+
+ @Override
+ public Transformer normalizationTransformer()
+ {
+ return normalizationTransformer;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/30acba2e/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
index 44fd7b0..5331f0f 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
@@ -25,9 +25,6 @@ import java.util.Map;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
@@ -82,17 +79,10 @@ public class JavaxXmlSerializer extends AbstractTextSerializer
private JavaxXmlSettings settings;
- private Transformer toStringTransformer;
-
@Override
public void initialize() throws Exception
{
settings = JavaxXmlSettings.orDefault( descriptor.metaInfo( JavaxXmlSettings.class ) );
- toStringTransformer = xmlFactories.transformerFactory().newTransformer();
- toStringTransformer.setOutputProperty( OutputKeys.METHOD, "xml" );
- toStringTransformer.setOutputProperty( OutputKeys.VERSION, "1.1" );
- toStringTransformer.setOutputProperty( OutputKeys.STANDALONE, "yes" );
- toStringTransformer.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
}
@Override
@@ -112,7 +102,8 @@ public class JavaxXmlSerializer extends AbstractTextSerializer
}
else
{
- toStringTransformer.transform( new DOMSource( xmlDocument ), new StreamResult( writer ) );
+ xmlFactories.serializationTransformer().transform( new DOMSource( xmlDocument ),
+ new StreamResult( writer ) );
}
}
catch( IOException ex )
@@ -133,22 +124,12 @@ public class JavaxXmlSerializer extends AbstractTextSerializer
private <T> Document doSerializeRoot( Options options, T object )
{
- try
- {
- Document doc = xmlFactories.documentBuilderFactory().newDocumentBuilder().newDocument();
- doc.setXmlVersion( "1.1" );
- doc.setXmlStandalone( true );
- Element stateElement = doc.createElement( settings.getRootTagName() );
- Node node = doSerialize( doc, options, object, true );
- stateElement.appendChild( node );
- doc.appendChild( stateElement );
- return doc;
- }
- catch( ParserConfigurationException ex )
- {
- throw new SerializationException( "Unable to create XML document. "
- + "Is your javax.xml subsystem correctly set up?", ex );
- }
+ Document doc = xmlFactories.newDocumentForSerialization();
+ Element stateElement = doc.createElement( settings.getRootTagName() );
+ Node node = doSerialize( doc, options, object, true );
+ stateElement.appendChild( node );
+ doc.appendChild( stateElement );
+ return doc;
}
private <T> Node doSerialize( Document document, Options options, T object, boolean root )