Encoder in GeoTools does not work for SLD
I'm trying to use GeoTools to write SLDs on the fly for an application I am developing. But try as I might, I can't get the SLDs to be output.
Starting with an SLD that looks like this:
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>named_layer</Name>
<UserStyle>
<Name>style</Name>
<IsDefault>true</IsDefault>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#00aa00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">0.15</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
I use the following code:
package com.example.sld;
import org.geotools.sld.SLDConfiguration;
import org.geotools.sld.bindings.SLD;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.xml.Configuration;
import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
public class TestStyle {
private String style;
public TestStyle() {
Configuration config = new SLDConfiguration();
Parser parser = new Parser(config);
InputStream is = getClass().getResourceAsStream("test-sld.xml");
StyledLayerDescriptor sld = null;
try {
sld = (StyledLayerDescriptor) parser.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Configuration configuration = new SLDConfiguration();
Encoder encoder = new Encoder(configuration);
encoder.setOmitXMLDeclaration(true);
try {
this.style = encoder.encodeAsString(sld, SLD.STYLEDLAYERDESCRIPTOR);
} catch (IOException e) {
e.printStackTrace();
}
this.style = new String();
}
}
The SLD parses OK. I can inspect its structure in my debugger and it is read correctly. But on encoding, the resultant SLD is empty:
<sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink"/>
What am I doing wrong?
(Version of GeoTools is 20.1, following the guide here: http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder)
Thanks in advance
java xml gis geotools sld
add a comment |
I'm trying to use GeoTools to write SLDs on the fly for an application I am developing. But try as I might, I can't get the SLDs to be output.
Starting with an SLD that looks like this:
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>named_layer</Name>
<UserStyle>
<Name>style</Name>
<IsDefault>true</IsDefault>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#00aa00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">0.15</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
I use the following code:
package com.example.sld;
import org.geotools.sld.SLDConfiguration;
import org.geotools.sld.bindings.SLD;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.xml.Configuration;
import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
public class TestStyle {
private String style;
public TestStyle() {
Configuration config = new SLDConfiguration();
Parser parser = new Parser(config);
InputStream is = getClass().getResourceAsStream("test-sld.xml");
StyledLayerDescriptor sld = null;
try {
sld = (StyledLayerDescriptor) parser.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Configuration configuration = new SLDConfiguration();
Encoder encoder = new Encoder(configuration);
encoder.setOmitXMLDeclaration(true);
try {
this.style = encoder.encodeAsString(sld, SLD.STYLEDLAYERDESCRIPTOR);
} catch (IOException e) {
e.printStackTrace();
}
this.style = new String();
}
}
The SLD parses OK. I can inspect its structure in my debugger and it is read correctly. But on encoding, the resultant SLD is empty:
<sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink"/>
What am I doing wrong?
(Version of GeoTools is 20.1, following the guide here: http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder)
Thanks in advance
java xml gis geotools sld
add a comment |
I'm trying to use GeoTools to write SLDs on the fly for an application I am developing. But try as I might, I can't get the SLDs to be output.
Starting with an SLD that looks like this:
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>named_layer</Name>
<UserStyle>
<Name>style</Name>
<IsDefault>true</IsDefault>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#00aa00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">0.15</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
I use the following code:
package com.example.sld;
import org.geotools.sld.SLDConfiguration;
import org.geotools.sld.bindings.SLD;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.xml.Configuration;
import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
public class TestStyle {
private String style;
public TestStyle() {
Configuration config = new SLDConfiguration();
Parser parser = new Parser(config);
InputStream is = getClass().getResourceAsStream("test-sld.xml");
StyledLayerDescriptor sld = null;
try {
sld = (StyledLayerDescriptor) parser.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Configuration configuration = new SLDConfiguration();
Encoder encoder = new Encoder(configuration);
encoder.setOmitXMLDeclaration(true);
try {
this.style = encoder.encodeAsString(sld, SLD.STYLEDLAYERDESCRIPTOR);
} catch (IOException e) {
e.printStackTrace();
}
this.style = new String();
}
}
The SLD parses OK. I can inspect its structure in my debugger and it is read correctly. But on encoding, the resultant SLD is empty:
<sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink"/>
What am I doing wrong?
(Version of GeoTools is 20.1, following the guide here: http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder)
Thanks in advance
java xml gis geotools sld
I'm trying to use GeoTools to write SLDs on the fly for an application I am developing. But try as I might, I can't get the SLDs to be output.
Starting with an SLD that looks like this:
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>named_layer</Name>
<UserStyle>
<Name>style</Name>
<IsDefault>true</IsDefault>
<FeatureTypeStyle>
<Rule>
<PointSymbolizer>
<Graphic>
<Mark>
<WellKnownName>circle</WellKnownName>
<Fill>
<CssParameter name="fill">#00aa00</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#000000</CssParameter>
<CssParameter name="stroke-width">0.15</CssParameter>
</Stroke>
</Mark>
<Size>8</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
I use the following code:
package com.example.sld;
import org.geotools.sld.SLDConfiguration;
import org.geotools.sld.bindings.SLD;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.xml.Configuration;
import org.geotools.xml.Encoder;
import org.geotools.xml.Parser;
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
public class TestStyle {
private String style;
public TestStyle() {
Configuration config = new SLDConfiguration();
Parser parser = new Parser(config);
InputStream is = getClass().getResourceAsStream("test-sld.xml");
StyledLayerDescriptor sld = null;
try {
sld = (StyledLayerDescriptor) parser.parse(is);
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Configuration configuration = new SLDConfiguration();
Encoder encoder = new Encoder(configuration);
encoder.setOmitXMLDeclaration(true);
try {
this.style = encoder.encodeAsString(sld, SLD.STYLEDLAYERDESCRIPTOR);
} catch (IOException e) {
e.printStackTrace();
}
this.style = new String();
}
}
The SLD parses OK. I can inspect its structure in my debugger and it is read correctly. But on encoding, the resultant SLD is empty:
<sld:StyledLayerDescriptor xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ogc="http://www.opengis.net/ogc" xmlns:sld="http://www.opengis.net/sld" xmlns:xlink="http://www.w3.org/1999/xlink"/>
What am I doing wrong?
(Version of GeoTools is 20.1, following the guide here: http://docs.geotools.org/latest/userguide/library/xml/style.html#encoder)
Thanks in advance
java xml gis geotools sld
java xml gis geotools sld
asked Nov 28 '18 at 6:10
MichaelMichael
174
174
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Your approach would work if you had a version 1.1.0 SLD (or more properly an SE) document, and if you used a import org.geotools.sld.v1_1.SLD
object to pass to the encoder. However you have a version 1.0.0 SLD document so you need to use a
SLDTransformer
class to output your style objects. So something like:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53513177%2fencoder-in-geotools-does-not-work-for-sld%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Your approach would work if you had a version 1.1.0 SLD (or more properly an SE) document, and if you used a import org.geotools.sld.v1_1.SLD
object to pass to the encoder. However you have a version 1.0.0 SLD document so you need to use a
SLDTransformer
class to output your style objects. So something like:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
add a comment |
Your approach would work if you had a version 1.1.0 SLD (or more properly an SE) document, and if you used a import org.geotools.sld.v1_1.SLD
object to pass to the encoder. However you have a version 1.0.0 SLD document so you need to use a
SLDTransformer
class to output your style objects. So something like:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
add a comment |
Your approach would work if you had a version 1.1.0 SLD (or more properly an SE) document, and if you used a import org.geotools.sld.v1_1.SLD
object to pass to the encoder. However you have a version 1.0.0 SLD document so you need to use a
SLDTransformer
class to output your style objects. So something like:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
Your approach would work if you had a version 1.1.0 SLD (or more properly an SE) document, and if you used a import org.geotools.sld.v1_1.SLD
object to pass to the encoder. However you have a version 1.0.0 SLD document so you need to use a
SLDTransformer
class to output your style objects. So something like:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
SLDTransformer transformer = new SLDTransformer();
transformer.setIndentation(2);
transformer.transform(sld, bos);
String style = bos.toString();
System.out.println(style);
edited Nov 29 '18 at 9:09
answered Nov 29 '18 at 8:48
Ian TurtonIan Turton
4,67612036
4,67612036
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53513177%2fencoder-in-geotools-does-not-work-for-sld%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown