Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Very similar problem: "How to map String coordinates to java.awt.Point ?"</p> <p>(0) Schema</p> <pre><code>&lt;xsd:simpleType name="Point"&gt; &lt;xsd:restriction base="xsd:string"&gt; &lt;xsd:pattern value="([0-9])+,([0-9])+" /&gt; &lt;/xsd:restriction&gt; &lt;/xsd:simpleType&gt; &lt;xsd:complexType name="HexAreaBorder"&gt; &lt;xsd:sequence minOccurs="1" maxOccurs="1"&gt; &lt;xsd:element minOccurs="1" maxOccurs="1" name="type" type="xsd:string" /&gt; &lt;xsd:element minOccurs="1" maxOccurs="1" name="name" type="xsd:string" /&gt; &lt;xsd:element name="points" type="Point" minOccurs="1" maxOccurs="unbounded" /&gt; &lt;/xsd:sequence&gt; &lt;/xsd:complexType&gt; </code></pre> <p>(1) Create adapter class that extends XmlAdapter.</p> <pre><code>package com.kjcode.hexgrid.jaxbadapter; import java.awt.Point; import javax.xml.bind.annotation.adapters.XmlAdapter; public class PointAdapter extends XmlAdapter&lt;String, Point&gt; { @Override public Point unmarshal(String v) throws Exception { String[] coords = v.split(","); return new Point(Integer.parseInt(coords[0]), Integer.parseInt(coords[1])); } @Override public String marshal(Point v) throws Exception { return String.format("%d,%d", v.x, v.y); } } </code></pre> <p>(2) Create bindings file. The key is to add: jaxb:extensionBindingPrefixes="xjc" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:extensionBindingPrefixes="xjc" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns="hexmap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" jaxb:version="2.1"&gt; &lt;jaxb:bindings schemaLocation="hexmap.xsd"&gt; &lt;jaxb:globalBindings&gt; &lt;xjc:javaType adapter="com.kjcode.hexgrid.jaxbadapter.PointAdapter" name="java.awt.Point" xmlType="Point" /&gt; &lt;/jaxb:globalBindings&gt; &lt;/jaxb:bindings&gt; &lt;/jaxb:bindings&gt; </code></pre> <p>(3) Configure pom.xml</p> <pre><code>&lt;plugin&gt; &lt;groupId&gt;com.sun.tools.xjc.maven2&lt;/groupId&gt; &lt;artifactId&gt;maven-jaxb-plugin&lt;/artifactId&gt; &lt;version&gt;1.1.1&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;goals&gt; &lt;goal&gt;generate&lt;/goal&gt; &lt;/goals&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;configuration&gt; &lt;generatePackage&gt;com.kjcode.hexmap.api.logic.field.generated&lt;/generatePackage&gt; &lt;extension&gt;true&lt;/extension&gt; &lt;/configuration&gt; &lt;/plugin&gt; </code></pre> <p>(4) JAXB will generate</p> <pre><code>public class HexAreaBorder { @XmlElement(required = true) protected String type; @XmlElement(required = true) protected String name; @XmlElement(required = true, type = String.class) @XmlJavaTypeAdapter(PointAdapter.class) protected List&lt;Point&gt; points = new LinkedList&lt;Point&gt;(); </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload