public boolean isXmlXsdValid(String sourceXml) {
JAXBContext context = JAXBContext
.newInstance(package.path.to.generated.sources.ObjectFactory.class,
package.path.to.generated.sources2.ObjectFactory.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
unmarshaller.setSchema(schemaFactory.newSchema(new Source[] {
new StreamSource(XMLHelper.class.getResourceAsStream("/path/to/schema1")),
new StreamSource(XMLHelper.class.getResourceAsStream("/path/to/schema2")),
new StreamSource(XMLHelper.class.getResourceAsStream("/path/to/schema3")),
}));
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent event) {
LOG.info("\nEVENT");
LOG.info("SEVERITY: {}", event.getSeverity());
LOG.info("MESSAGE: {}", event.getMessage());
LOG.info("LINKED EXCEPTION: {}", event.getLinkedException());
LOG.info("LOCATOR");
LOG.info(" LINE NUMBER: {}", event.getLocator().getLineNumber());
LOG.info(" COLUMN NUMBER: {}", event.getLocator().getColumnNumber());
LOG.info(" OFFSET: {}", event.getLocator().getOffset());
LOG.info(" OBJECT: {}", event.getLocator().getObject());
LOG.info(" NODE: {}", event.getLocator().getNode());
LOG.info(" URL: {}", event.getLocator().getURL());
return true;
}
});
unmarshaller.unmarshal(new StringReader(sourceXml));
return true;
} catch (SAXException e) {
LOG.error("While trying to validate the xml, caught a SAXException ", e);
} catch (JAXBException e) {
LOG.error("While trying to validate the xml, caught an JAXBException ", e);
}
}
Entwicklung
Donnerstag, 6. November 2014
Validation of XML by XSD Schema(s) with Error Handler
The paths to the schemas (/path/to/schema1) must be in the order of dependency (schema2 need schema1 ---> import schema1, import schema2)
Mittwoch, 29. Oktober 2014
How to create a simple Java Builder with help of Notepad ++ regexp
1. copy member:
2. Run this Search/Replace in Notepad++
Search:
Create a nice and fluent builder:
private int id;
private String comment;
private String targetId;
private String targetName;
private String targetSource;
private String tool;
private String action;
private Date time;
2. Run this Search/Replace in Notepad++
Search:
\S+ (\S+) (\S)(\S+);Replace:
public LogActionBuilder \2\3 \(\1 \2\3\) { this.logAction.set\U\2\E\3\(\2\3\); return this;}
Create a nice and fluent builder:
public LogActionBuilder id(int id) {
this.logAction.setId(id);
return this;
}
public LogActionBuilder comment(String comment) {
this.logAction.setComment(comment);
return this;
}
Donnerstag, 9. Juni 2011
Android Market Lücke
Eine interessante Lücke im Android hat Jan Oberheide gefunden. Diese hat er vor sechs Monanten veröffentlicht. Mit diesem Exploit kann man aus einer App heraus, beliebige Apps nachinstallieren. Die Lücke ist mittlerweile geschlossen, aber folgender Artikel gibt eine interessante Einsicht in die Tiefen des Android-Systems:
When Angry Birds Attack Android (WABAA)
When Angry Birds Attack Android (WABAA)
Donnerstag, 12. Mai 2011
Das ist das Haus vom Nikolaus
Habe meine nächste App veröffentlicht XD Diesmal kann man das Haus vom Nikolaus zeichnen. Die App ist relativ klein und besteht aus zwei Activities. Die erste startet das eigentliche Spiel (Akt2).
Akt2 besteht aus einem Canvas. Es werden fünf rote Punkte, als Vorlage für das Haus gezeichnet. Ich habe mich für die Punkte entschieden, da die Analyse der tatsächlichen Bewegungen nicht ganz ohne und jeder Fehler würde sofort bestraft werden. Zur Vollständigkeit schreibe ich einfach mal, wie ich es gelöst hätte. Die Punkte werden aufgezeichnet. Durch die Nullstellen der ersten Ableitung kann man die Stellen, an denen der Finger die Richtung ändert erfassen und somit eine Ecke signalisieren. Um unsaubere Bewegung auszuschließen, müsste man die Kurve mit einem Filter glätten. Ich habe es mir an dieser Stelle einfach gemacht. Ich berechne die Entfernung zu einem Punkt (Satz des Pythagoras) und markiere somit die passierte Ecke. Zur besseren Sichtbarkeit markiere ich den Punkt mit der grünen Farbe. Damit die Punkte auf jedem Bildschirm zu sehen sind, maßen sie 10% der Höhe. Das sieht doof aus, falls man das Telefon dreht, aber das schalte ich in der nächsten Version ab.
Die Ecken werden erfasst und zwei Verbindungen ergeben eine Kante. Die Kanten werden miteinander verglichen. Gleichen sich zwei Kanten (bidirektionale Prüfung), gilt das Spiel als Verloren. Es gibt zwei ungültigen Kanten, die Verbindung des obersten Punktes mit den unteren beiden. Hat ein Spieler acht Kanten erstellt, gilt das Spiel als gewonnen.
Letzter Schritt ist der Eintrag in die Datenbank. Die Reihenfolge aller Punkte wird abgeglichen und eingetragen, falls noch nicht existent. Der aktuelle Canvas wird als Bild gespeichert (Ungefähr so: http://entwickler-forum.de/archive/index.php/t-5765.html).
Eigentlich sehr simpel und in wenigen Stunden programmiert ;-)
Akt2 besteht aus einem Canvas. Es werden fünf rote Punkte, als Vorlage für das Haus gezeichnet. Ich habe mich für die Punkte entschieden, da die Analyse der tatsächlichen Bewegungen nicht ganz ohne und jeder Fehler würde sofort bestraft werden. Zur Vollständigkeit schreibe ich einfach mal, wie ich es gelöst hätte. Die Punkte werden aufgezeichnet. Durch die Nullstellen der ersten Ableitung kann man die Stellen, an denen der Finger die Richtung ändert erfassen und somit eine Ecke signalisieren. Um unsaubere Bewegung auszuschließen, müsste man die Kurve mit einem Filter glätten. Ich habe es mir an dieser Stelle einfach gemacht. Ich berechne die Entfernung zu einem Punkt (Satz des Pythagoras) und markiere somit die passierte Ecke. Zur besseren Sichtbarkeit markiere ich den Punkt mit der grünen Farbe. Damit die Punkte auf jedem Bildschirm zu sehen sind, maßen sie 10% der Höhe. Das sieht doof aus, falls man das Telefon dreht, aber das schalte ich in der nächsten Version ab.
Die Ecken werden erfasst und zwei Verbindungen ergeben eine Kante. Die Kanten werden miteinander verglichen. Gleichen sich zwei Kanten (bidirektionale Prüfung), gilt das Spiel als Verloren. Es gibt zwei ungültigen Kanten, die Verbindung des obersten Punktes mit den unteren beiden. Hat ein Spieler acht Kanten erstellt, gilt das Spiel als gewonnen.
Letzter Schritt ist der Eintrag in die Datenbank. Die Reihenfolge aller Punkte wird abgeglichen und eingetragen, falls noch nicht existent. Der aktuelle Canvas wird als Bild gespeichert (Ungefähr so: http://entwickler-forum.de/archive/index.php/t-5765.html).
Eigentlich sehr simpel und in wenigen Stunden programmiert ;-)
Mittwoch, 27. April 2011
Dienstag, 1. Februar 2011
RPGhelper Update 1.0.1
Yo Leutz!
Ich habe ein kleines Update gemacht. Nach Anraten von DW4891 habe ich das ScrollView-Element für das Editieren der Würfel eingebaut:
http://developer.android.com/reference/android/widget/ScrollView.html
Die Version lade ich irgendwann abends (oder morgen) hoch.
ciao
kescha
Ich habe ein kleines Update gemacht. Nach Anraten von DW4891 habe ich das ScrollView-Element für das Editieren der Würfel eingebaut:
http://developer.android.com/reference/android/widget/ScrollView.html
Die Version lade ich irgendwann abends (oder morgen) hoch.
ciao
kescha
Freitag, 7. Januar 2011
RPG-Helper
Yuhu, sowas wie die 1.0 Version des RPG-Helpers ist fertig! Ich muss jetzt nur noch eine Kreditkarte finden um die App im Android-Market zu veröffentlichen.
Abonnieren
Posts (Atom)