Skip to content

Instantly share code, notes, and snippets.

@mark-jay
Last active March 23, 2020 12:38
Show Gist options
  • Select an option

  • Save mark-jay/06d14bdd8e433c8c1d548ef0181d2cd9 to your computer and use it in GitHub Desktop.

Select an option

Save mark-jay/06d14bdd8e433c8c1d548ef0181d2cd9 to your computer and use it in GitHub Desktop.
xml to java generator

./xml-to-java.sh /path/to/package/directory

#!/bin/bash
# https://gist.github.com/mark-jay/06d14bdd8e433c8c1d548ef0181d2cd9
JAVA_OUTPUT_DIR="$1"
DIR="/tmp/xml-to-java-tmp"
URL="https://github.com/relaxng/jing-trang/releases/download/V20181222/trang-20181222.zip"
FILENAME="trang-20181222.zip"
JAR_FILENAME="trang-20181222/trang.jar"
XML_INPUT="$DIR/input.xml"
XSD_OUTPUT="$DIR/output.xsd"
if [ -z "$JAVA_OUTPUT_DIR" ] ; then
echo "usage: $0 <java-beans-path>\n java-beans-path - where full path to the place where java beans should be placed"
exit 1
fi
mkdir -p "$DIR"
cd "$DIR"
function download-file() {
if [ ! -f "$FILENAME" ] ; then
wget "$URL"
unzip "$FILENAME"
else
echo "file download skipped"
fi
}
function create-image() {
download-file
cat << EOF > Dockerfile
FROM openjdk:11
COPY $JAR_FILENAME /trang.jar
WORKDIR /
# RUN
# CMD ["java", "-jar", "/trang.jar"]
ENTRYPOINT ["java", "-jar", "/trang.jar"]
EOF
docker build -t trang .
}
function generate-xsd {
cd $(echo "$JAVA_OUTPUT_DIR" | sed 's|src/main/java.*|src/main/java|g')
PACKAGE="$(echo "$JAVA_OUTPUT_DIR" | sed 's|.*src/main/java/||g' | sed 's|/|.|g')"
xjc -extension -p "$PACKAGE" "$XSD_OUTPUT"
echo $JAVA_OUTPUT_DIR/package-info.java
cat << EOF > "$JAVA_OUTPUT_DIR/package-info.java"
/**
* generated from
$(cat $XML_INPUT)
*
* using xsd
$(cat $XSD_OUTPUT)
*
*/
package $PACKAGE;
EOF
}
mkdir -p $JAVA_OUTPUT_DIR
[[ "$(docker images | grep trang | wc -l)" -gt 0 ]] || create-image
${EDITOR:-vi} "$XML_INPUT"
docker run -v "$DIR:$DIR" trang "$XML_INPUT" "$XSD_OUTPUT"
generate-xsd
echo done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment