summaryrefslogtreecommitdiff
path: root/STALXService/src
diff options
context:
space:
mode:
Diffstat (limited to 'STALXService/src')
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ATRType.java100
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeList.java71
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeType.java264
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/CommandAPDUType.java154
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ObjectFactory.java172
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResetType.java64
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseAPDUType.java161
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseType.java82
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ScriptType.java85
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/VerifyAPDUType.java266
-rw-r--r--STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/package-info.java2
-rw-r--r--STALXService/src/main/java/at/gv/egiz/stalx/service/STALPortType.java45
-rw-r--r--STALXService/src/main/java/at/gv/egiz/stalx/service/STALService.java73
-rw-r--r--STALXService/src/main/java/at/gv/egiz/stalx/service/translator/STALXTranslationHandler.java217
-rw-r--r--STALXService/src/main/resources/wsdl/CardChannel.xsd148
-rw-r--r--STALXService/src/main/resources/wsdl/stal.xsd162
-rw-r--r--STALXService/src/main/resources/wsdl/stalx.wsdl123
-rw-r--r--STALXService/src/test/java/at/gv/egiz/stalx/service/ClientJAXBContextFactory.java52
-rw-r--r--STALXService/src/test/java/at/gv/egiz/stalx/service/STALServiceTest.java112
19 files changed, 2353 insertions, 0 deletions
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ATRType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ATRType.java
new file mode 100644
index 00000000..b1b83976
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ATRType.java
@@ -0,0 +1,100 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * Contains the ATR received as reponse to a Reset
+ * command
+ *
+ * <p>Java class for ATRType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ATRType">
+ * &lt;simpleContent>
+ * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>hexBinary">
+ * &lt;attribute name="rc" type="{http://www.w3.org/2001/XMLSchema}integer" default="0" />
+ * &lt;/extension>
+ * &lt;/simpleContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ATRType", propOrder = {
+ "value"
+})
+public class ATRType {
+
+ @XmlValue
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] value;
+ @XmlAttribute
+ protected BigInteger rc;
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValue(byte[] value) {
+ this.value = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the rc property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getRc() {
+ if (rc == null) {
+ return new BigInteger("0");
+ } else {
+ return rc;
+ }
+ }
+
+ /**
+ * Sets the value of the rc property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setRc(BigInteger value) {
+ this.rc = value;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeList.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeList.java
new file mode 100644
index 00000000..2b00509f
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeList.java
@@ -0,0 +1,71 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Contains a list of attributes
+ *
+ * <p>Java class for AttributeList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="AttributeList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Attribute" type="{http://www.buergerkarte.at/cardchannel}AttributeType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AttributeList", propOrder = {
+ "attribute"
+})
+public class AttributeList {
+
+ @XmlElement(name = "Attribute")
+ protected List<AttributeType> attribute;
+
+ /**
+ * Gets the value of the attribute property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the attribute property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getAttribute().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link AttributeType }
+ *
+ *
+ */
+ public List<AttributeType> getAttribute() {
+ if (attribute == null) {
+ attribute = new ArrayList<AttributeType>();
+ }
+ return this.attribute;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeType.java
new file mode 100644
index 00000000..d258545a
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeType.java
@@ -0,0 +1,264 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * Contains an attribute converted from ASN.1
+ *
+ * <p>Java class for AttributeType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="AttributeType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="Integer" type="{http://www.w3.org/2001/XMLSchema}integer" minOccurs="0"/>
+ * &lt;element name="Latin1String" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="UTF8String" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="NumericString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PrintableString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="GeneralizedTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/>
+ * &lt;element name="Date" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="oid" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "AttributeType", propOrder = {
+ "integer",
+ "latin1String",
+ "utf8String",
+ "numericString",
+ "printableString",
+ "generalizedTime",
+ "date"
+})
+public class AttributeType {
+
+ @XmlElement(name = "Integer")
+ protected BigInteger integer;
+ @XmlElement(name = "Latin1String")
+ protected String latin1String;
+ @XmlElement(name = "UTF8String")
+ protected String utf8String;
+ @XmlElement(name = "NumericString")
+ protected String numericString;
+ @XmlElement(name = "PrintableString")
+ protected String printableString;
+ @XmlElement(name = "GeneralizedTime")
+ @XmlSchemaType(name = "dateTime")
+ protected XMLGregorianCalendar generalizedTime;
+ @XmlElement(name = "Date")
+ protected String date;
+ @XmlAttribute(required = true)
+ protected String oid;
+
+ /**
+ * Gets the value of the integer property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getInteger() {
+ return integer;
+ }
+
+ /**
+ * Sets the value of the integer property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setInteger(BigInteger value) {
+ this.integer = value;
+ }
+
+ /**
+ * Gets the value of the latin1String property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLatin1String() {
+ return latin1String;
+ }
+
+ /**
+ * Sets the value of the latin1String property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLatin1String(String value) {
+ this.latin1String = value;
+ }
+
+ /**
+ * Gets the value of the utf8String property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getUTF8String() {
+ return utf8String;
+ }
+
+ /**
+ * Sets the value of the utf8String property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setUTF8String(String value) {
+ this.utf8String = value;
+ }
+
+ /**
+ * Gets the value of the numericString property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNumericString() {
+ return numericString;
+ }
+
+ /**
+ * Sets the value of the numericString property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNumericString(String value) {
+ this.numericString = value;
+ }
+
+ /**
+ * Gets the value of the printableString property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPrintableString() {
+ return printableString;
+ }
+
+ /**
+ * Sets the value of the printableString property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPrintableString(String value) {
+ this.printableString = value;
+ }
+
+ /**
+ * Gets the value of the generalizedTime property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getGeneralizedTime() {
+ return generalizedTime;
+ }
+
+ /**
+ * Sets the value of the generalizedTime property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setGeneralizedTime(XMLGregorianCalendar value) {
+ this.generalizedTime = value;
+ }
+
+ /**
+ * Gets the value of the date property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDate() {
+ return date;
+ }
+
+ /**
+ * Sets the value of the date property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDate(String value) {
+ this.date = value;
+ }
+
+ /**
+ * Gets the value of the oid property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getOid() {
+ return oid;
+ }
+
+ /**
+ * Sets the value of the oid property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setOid(String value) {
+ this.oid = value;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/CommandAPDUType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/CommandAPDUType.java
new file mode 100644
index 00000000..98337761
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/CommandAPDUType.java
@@ -0,0 +1,154 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * Contains a sequence of bytes send as command APDU to the
+ * icc
+ *
+ * <p>Java class for CommandAPDUType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="CommandAPDUType">
+ * &lt;simpleContent>
+ * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>hexBinary">
+ * &lt;attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" />
+ * &lt;attribute name="of" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" />
+ * &lt;attribute name="expectedSW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" />
+ * &lt;/extension>
+ * &lt;/simpleContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CommandAPDUType", propOrder = {
+ "value"
+})
+public class CommandAPDUType {
+
+ @XmlValue
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] value;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "positiveInteger")
+ protected BigInteger sequence;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "positiveInteger")
+ protected BigInteger of;
+ @XmlAttribute
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] expectedSW;
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValue(byte[] value) {
+ this.value = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the sequence property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getSequence() {
+ return sequence;
+ }
+
+ /**
+ * Sets the value of the sequence property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setSequence(BigInteger value) {
+ this.sequence = value;
+ }
+
+ /**
+ * Gets the value of the of property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getOf() {
+ return of;
+ }
+
+ /**
+ * Sets the value of the of property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setOf(BigInteger value) {
+ this.of = value;
+ }
+
+ /**
+ * Gets the value of the expectedSW property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getExpectedSW() {
+ return expectedSW;
+ }
+
+ /**
+ * Sets the value of the expectedSW property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setExpectedSW(byte[] value) {
+ this.expectedSW = ((byte[]) value);
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ObjectFactory.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ObjectFactory.java
new file mode 100644
index 00000000..dc8ba4da
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ObjectFactory.java
@@ -0,0 +1,172 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the at.buergerkarte.namespaces.cardchannel.service package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ private final static QName _EHIC_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "EHIC");
+ private final static QName _Status_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "Status");
+ private final static QName _SVPersonenbindung_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "SV-Personenbindung");
+ private final static QName _Grunddaten_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "Grunddaten");
+
+ /** TODO */
+ private final static QName _Response_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "Response");
+ private final static QName _Script_QNAME = new QName("http://www.buergerkarte.at/cardchannel", "Script");
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: at.buergerkarte.namespaces.cardchannel.service
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link ResponseAPDUType }
+ *
+ */
+ public ResponseAPDUType createResponseAPDUType() {
+ return new ResponseAPDUType();
+ }
+
+ /**
+ * Create an instance of {@link AttributeType }
+ *
+ */
+ public AttributeType createAttributeType() {
+ return new AttributeType();
+ }
+
+ /**
+ * Create an instance of {@link VerifyAPDUType }
+ *
+ */
+ public VerifyAPDUType createVerifyAPDUType() {
+ return new VerifyAPDUType();
+ }
+
+ /**
+ * Create an instance of {@link ATRType }
+ *
+ */
+ public ATRType createATRType() {
+ return new ATRType();
+ }
+
+ /**
+ * Create an instance of {@link ResponseType }
+ *
+ */
+ public ResponseType createResponseType() {
+ return new ResponseType();
+ }
+
+ /**
+ * Create an instance of {@link CommandAPDUType }
+ *
+ */
+ public CommandAPDUType createCommandAPDUType() {
+ return new CommandAPDUType();
+ }
+
+ /**
+ * Create an instance of {@link ResetType }
+ *
+ */
+ public ResetType createResetType() {
+ return new ResetType();
+ }
+
+ /**
+ * Create an instance of {@link ScriptType }
+ *
+ */
+ public ScriptType createScriptType() {
+ return new ScriptType();
+ }
+
+ /**
+ * Create an instance of {@link AttributeList }
+ *
+ */
+ public AttributeList createAttributeList() {
+ return new AttributeList();
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link AttributeList }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "EHIC")
+ public JAXBElement<AttributeList> createEHIC(AttributeList value) {
+ return new JAXBElement<AttributeList>(_EHIC_QNAME, AttributeList.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link AttributeList }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "Status")
+ public JAXBElement<AttributeList> createStatus(AttributeList value) {
+ return new JAXBElement<AttributeList>(_Status_QNAME, AttributeList.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link ResponseType }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "Response", substitutionHeadNamespace = "http://www.egiz.gv.at/stal", substitutionHeadName = "OtherResponse")
+ public JAXBElement<ResponseType> createResponse(ResponseType value) {
+ return new JAXBElement<ResponseType>(_Response_QNAME, ResponseType.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link byte[]}{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "SV-Personenbindung")
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ public JAXBElement<byte[]> createSVPersonenbindung(byte[] value) {
+ return new JAXBElement<byte[]>(_SVPersonenbindung_QNAME, byte[].class, null, ((byte[]) value));
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link ScriptType }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "Script", substitutionHeadNamespace = "http://www.egiz.gv.at/stal", substitutionHeadName = "OtherRequest")
+ public JAXBElement<ScriptType> createScript(ScriptType value) {
+ return new JAXBElement<ScriptType>(_Script_QNAME, ScriptType.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link AttributeList }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "http://www.buergerkarte.at/cardchannel", name = "Grunddaten")
+ public JAXBElement<AttributeList> createGrunddaten(AttributeList value) {
+ return new JAXBElement<AttributeList>(_Grunddaten_QNAME, AttributeList.class, null, value);
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResetType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResetType.java
new file mode 100644
index 00000000..e6e1eb95
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResetType.java
@@ -0,0 +1,64 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * Reset the icc and sequence counter
+ *
+ * <p>Java class for ResetType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ResetType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;attribute name="cold" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ResetType")
+public class ResetType {
+
+ @XmlAttribute
+ protected Boolean cold;
+
+ /**
+ * Gets the value of the cold property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public boolean isCold() {
+ if (cold == null) {
+ return true;
+ } else {
+ return cold;
+ }
+ }
+
+ /**
+ * Sets the value of the cold property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setCold(Boolean value) {
+ this.cold = value;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseAPDUType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseAPDUType.java
new file mode 100644
index 00000000..1dba7996
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseAPDUType.java
@@ -0,0 +1,161 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * Contains a sequence of bytes received from the card as response
+ * APDU
+ *
+ * <p>Java class for ResponseAPDUType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ResponseAPDUType">
+ * &lt;simpleContent>
+ * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>hexBinary">
+ * &lt;attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" />
+ * &lt;attribute name="rc" type="{http://www.w3.org/2001/XMLSchema}integer" default="0" />
+ * &lt;attribute name="SW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" default="9000" />
+ * &lt;/extension>
+ * &lt;/simpleContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ResponseAPDUType", propOrder = {
+ "value"
+})
+public class ResponseAPDUType {
+
+ @XmlValue
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] value;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "positiveInteger")
+ protected BigInteger sequence;
+ @XmlAttribute
+ protected BigInteger rc;
+ @XmlAttribute(name = "SW")
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] sw;
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValue(byte[] value) {
+ this.value = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the sequence property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getSequence() {
+ return sequence;
+ }
+
+ /**
+ * Sets the value of the sequence property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setSequence(BigInteger value) {
+ this.sequence = value;
+ }
+
+ /**
+ * Gets the value of the rc property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getRc() {
+ if (rc == null) {
+ return new BigInteger("0");
+ } else {
+ return rc;
+ }
+ }
+
+ /**
+ * Sets the value of the rc property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setRc(BigInteger value) {
+ this.rc = value;
+ }
+
+ /**
+ * Gets the value of the sw property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getSW() {
+ if (sw == null) {
+ return new HexBinaryAdapter().unmarshal("9000");
+ } else {
+ return sw;
+ }
+ }
+
+ /**
+ * Sets the value of the sw property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSW(byte[] value) {
+ this.sw = ((byte[]) value);
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseType.java
new file mode 100644
index 00000000..86750d5d
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseType.java
@@ -0,0 +1,82 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * extends abstract stal:ResponseType
+ *
+ * Contains the result of the script executed by the
+ * BKU
+ *
+ * <p>Java class for ResponseType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ResponseType">
+ * &lt;complexContent>
+ * &lt;extension base="{http://www.egiz.gv.at/stal}ResponseType">
+ * &lt;choice maxOccurs="unbounded">
+ * &lt;element name="ATR" type="{http://www.buergerkarte.at/cardchannel}ATRType"/>
+ * &lt;element name="ResponseAPDU" type="{http://www.buergerkarte.at/cardchannel}ResponseAPDUType"/>
+ * &lt;/choice>
+ * &lt;/extension>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ResponseType", propOrder = {
+ "atrOrResponseAPDU"
+})
+public class ResponseType
+ extends at.gv.egiz.stal.service.types.ResponseType
+{
+
+ @XmlElements({
+ @XmlElement(name = "ATR", type = ATRType.class),
+ @XmlElement(name = "ResponseAPDU", type = ResponseAPDUType.class)
+ })
+ protected List<Object> atrOrResponseAPDU;
+
+ /**
+ * Gets the value of the atrOrResponseAPDU property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the atrOrResponseAPDU property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getATROrResponseAPDU().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ATRType }
+ * {@link ResponseAPDUType }
+ *
+ *
+ */
+ public List<Object> getATROrResponseAPDU() {
+ if (atrOrResponseAPDU == null) {
+ atrOrResponseAPDU = new ArrayList<Object>();
+ }
+ return this.atrOrResponseAPDU;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ScriptType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ScriptType.java
new file mode 100644
index 00000000..18ac8f6c
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ScriptType.java
@@ -0,0 +1,85 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlType;
+import at.gv.egiz.stal.service.types.RequestType;
+
+
+/**
+ * extends abstract stal:RequestType
+ *
+ * Contains the script to be executed by the BKU
+ *
+ * <p>Java class for ScriptType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ScriptType">
+ * &lt;complexContent>
+ * &lt;extension base="{http://www.egiz.gv.at/stal}RequestType">
+ * &lt;choice maxOccurs="unbounded">
+ * &lt;element name="Reset" type="{http://www.buergerkarte.at/cardchannel}ResetType"/>
+ * &lt;element name="CommandAPDU" type="{http://www.buergerkarte.at/cardchannel}CommandAPDUType"/>
+ * &lt;element name="VerifyAPDU" type="{http://www.buergerkarte.at/cardchannel}VerifyAPDUType"/>
+ * &lt;/choice>
+ * &lt;/extension>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ScriptType", propOrder = {
+ "resetOrCommandAPDUOrVerifyAPDU"
+})
+public class ScriptType
+ extends RequestType
+{
+
+ @XmlElements({
+ @XmlElement(name = "VerifyAPDU", type = VerifyAPDUType.class),
+ @XmlElement(name = "Reset", type = ResetType.class),
+ @XmlElement(name = "CommandAPDU", type = CommandAPDUType.class)
+ })
+ protected List<Object> resetOrCommandAPDUOrVerifyAPDU;
+
+ /**
+ * Gets the value of the resetOrCommandAPDUOrVerifyAPDU property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the resetOrCommandAPDUOrVerifyAPDU property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getResetOrCommandAPDUOrVerifyAPDU().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link VerifyAPDUType }
+ * {@link ResetType }
+ * {@link CommandAPDUType }
+ *
+ *
+ */
+ public List<Object> getResetOrCommandAPDUOrVerifyAPDU() {
+ if (resetOrCommandAPDUOrVerifyAPDU == null) {
+ resetOrCommandAPDUOrVerifyAPDU = new ArrayList<Object>();
+ }
+ return this.resetOrCommandAPDUOrVerifyAPDU;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/VerifyAPDUType.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/VerifyAPDUType.java
new file mode 100644
index 00000000..8f688336
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/VerifyAPDUType.java
@@ -0,0 +1,266 @@
+
+package at.buergerkarte.namespaces.cardchannel.service;
+
+import java.math.BigInteger;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+
+/**
+ * Contains a sequence of bytes send as command APDU to the icc after a
+ * PIN entered by the user has been incorporated into the APDU
+ *
+ * <p>Java class for VerifyAPDUType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="VerifyAPDUType">
+ * &lt;simpleContent>
+ * &lt;extension base="&lt;http://www.w3.org/2001/XMLSchema>hexBinary">
+ * &lt;attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" />
+ * &lt;attribute name="of" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" />
+ * &lt;attribute name="expectedSW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" />
+ * &lt;attribute name="message" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;attribute name="format" use="required" type="{http://www.w3.org/2001/XMLSchema}hexBinary" />
+ * &lt;attribute name="offset" use="required" type="{http://www.w3.org/2001/XMLSchema}nonNegativeInteger" />
+ * &lt;attribute name="timeout" use="required" type="{http://www.w3.org/2001/XMLSchema}nonNegativeInteger" />
+ * &lt;/extension>
+ * &lt;/simpleContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "VerifyAPDUType", propOrder = {
+ "value"
+})
+public class VerifyAPDUType {
+
+ @XmlValue
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] value;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "positiveInteger")
+ protected BigInteger sequence;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "positiveInteger")
+ protected BigInteger of;
+ @XmlAttribute
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] expectedSW;
+ @XmlAttribute(required = true)
+ protected String message;
+ @XmlAttribute(required = true)
+ @XmlJavaTypeAdapter(HexBinaryAdapter.class)
+ @XmlSchemaType(name = "hexBinary")
+ protected byte[] format;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "nonNegativeInteger")
+ protected BigInteger offset;
+ @XmlAttribute(required = true)
+ @XmlSchemaType(name = "nonNegativeInteger")
+ protected BigInteger timeout;
+
+ /**
+ * Gets the value of the value property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Sets the value of the value property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValue(byte[] value) {
+ this.value = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the sequence property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getSequence() {
+ return sequence;
+ }
+
+ /**
+ * Sets the value of the sequence property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setSequence(BigInteger value) {
+ this.sequence = value;
+ }
+
+ /**
+ * Gets the value of the of property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getOf() {
+ return of;
+ }
+
+ /**
+ * Sets the value of the of property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setOf(BigInteger value) {
+ this.of = value;
+ }
+
+ /**
+ * Gets the value of the expectedSW property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getExpectedSW() {
+ return expectedSW;
+ }
+
+ /**
+ * Sets the value of the expectedSW property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setExpectedSW(byte[] value) {
+ this.expectedSW = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the message property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMessage() {
+ return message;
+ }
+
+ /**
+ * Sets the value of the message property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMessage(String value) {
+ this.message = value;
+ }
+
+ /**
+ * Gets the value of the format property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public byte[] getFormat() {
+ return format;
+ }
+
+ /**
+ * Sets the value of the format property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFormat(byte[] value) {
+ this.format = ((byte[]) value);
+ }
+
+ /**
+ * Gets the value of the offset property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getOffset() {
+ return offset;
+ }
+
+ /**
+ * Sets the value of the offset property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setOffset(BigInteger value) {
+ this.offset = value;
+ }
+
+ /**
+ * Gets the value of the timeout property.
+ *
+ * @return
+ * possible object is
+ * {@link BigInteger }
+ *
+ */
+ public BigInteger getTimeout() {
+ return timeout;
+ }
+
+ /**
+ * Sets the value of the timeout property.
+ *
+ * @param value
+ * allowed object is
+ * {@link BigInteger }
+ *
+ */
+ public void setTimeout(BigInteger value) {
+ this.timeout = value;
+ }
+
+}
diff --git a/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/package-info.java b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/package-info.java
new file mode 100644
index 00000000..05d7df46
--- /dev/null
+++ b/STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/package-info.java
@@ -0,0 +1,2 @@
+@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.buergerkarte.at/cardchannel", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
+package at.buergerkarte.namespaces.cardchannel.service;
diff --git a/STALXService/src/main/java/at/gv/egiz/stalx/service/STALPortType.java b/STALXService/src/main/java/at/gv/egiz/stalx/service/STALPortType.java
new file mode 100644
index 00000000..b31e60ce
--- /dev/null
+++ b/STALXService/src/main/java/at/gv/egiz/stalx/service/STALPortType.java
@@ -0,0 +1,45 @@
+package at.gv.egiz.stalx.service;
+
+//import at.buergerkarte.namespaces.cardchannel.service.ObjectFactory;
+//import at.buergerkarte.namespaces.cardchannel.service.ScriptType;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.bind.annotation.XmlSeeAlso;
+
+/**
+ * Dummy PortType to add at.buergerkarte.namespaces.cardchannel.service to the
+ * JAXB context seed.
+ *
+ * overriding a webmethod results in ClassCastEx for the WebResult
+ * ClassCastException: at.gv.egiz.stal.service.types.GetNextRequestResponseType
+ * cannot be cast to at.buergerkarte.namespaces.cardchannel.service.GetNextRequestResponseType
+ *
+ * adding a new method results in Error: Undefined operation name
+ *
+ * adding a constant doesn't seed
+ */
+@WebService(name = "STALPortType", targetNamespace = "http://www.egiz.gv.at/wsdl/stal")
+@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
+@XmlSeeAlso({
+ at.gv.egiz.stal.service.types.ObjectFactory.class,
+ at.buergerkarte.namespaces.cardchannel.service.ObjectFactory.class
+})
+interface STALPortType extends at.gv.egiz.stal.service.STALPortType {
+
+ // doesn't seed
+// public static final ScriptType seed = (new ObjectFactory()).createScriptType();
+ /**
+ * dummy method to put at.buergerkarte.namespaces.cardchannel.service as JAXB context seed
+ * @return
+ */
+// @WebMethod
+// @WebResult(name = "Script", targetNamespace = "http://www.buergerkarte.at/cardchannel", partName = "part1")
+ //java.lang.Error: Undefined operation name seedJAXBContext
+// ScriptType seedJAXBContext();
+
+// @WebMethod
+// @WebResult(name = "GetNextRequestResponse", targetNamespace = "http://www.egiz.gv.at/stal", partName = "part1")
+// @Override
+// public GetNextRequestResponseType connect(
+// @WebParam(name = "SessionId", targetNamespace = "http://www.egiz.gv.at/stal", partName = "part1") String sessionId);
+}
diff --git a/STALXService/src/main/java/at/gv/egiz/stalx/service/STALService.java b/STALXService/src/main/java/at/gv/egiz/stalx/service/STALService.java
new file mode 100644
index 00000000..eccd2c4f
--- /dev/null
+++ b/STALXService/src/main/java/at/gv/egiz/stalx/service/STALService.java
@@ -0,0 +1,73 @@
+
+package at.gv.egiz.stalx.service;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.logging.Logger;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceFeature;
+
+
+/**
+ * This class was generated by the JAX-WS RI.
+ * JAX-WS RI 2.1.3-b02-
+ * Generated source version: 2.1
+ *
+ */
+@WebServiceClient(name = "STALService", targetNamespace = "http://www.egiz.gv.at/wsdl/stal")
+//, wsdlLocation = "file:/home/clemens/workspace/mocca/BKUOnline/src/main/webapp/WEB-INF/wsdl/stal-service.wsdl")
+public class STALService
+ extends Service
+{
+
+// private final static URL STALSERVICE_WSDL_LOCATION;
+ private final static Logger logger = Logger.getLogger(at.gv.egiz.stalx.service.STALService.class.getName());
+
+// static {
+// URL url = null;
+// try {
+// URL baseUrl;
+// baseUrl = at.gv.egiz.stal.service.STALService.class.getResource(".");
+// url = new URL(baseUrl, "file:/home/clemens/workspace/mocca/BKUOnline/src/main/webapp/WEB-INF/wsdl/stal-service.wsdl");
+// } catch (MalformedURLException e) {
+// logger.warning("Failed to create URL for the wsdl Location: 'file:/home/clemens/workspace/mocca/BKUOnline/src/main/webapp/WEB-INF/wsdl/stal-service.wsdl', retrying as a local file");
+// logger.warning(e.getMessage());
+// }
+// STALSERVICE_WSDL_LOCATION = url;
+// }
+
+ public STALService(URL wsdlLocation, QName serviceName) {
+ super(wsdlLocation, serviceName);
+ }
+
+// public STALService() {
+// super(STALSERVICE_WSDL_LOCATION, new QName("http://www.egiz.gv.at/wsdl/stal", "STALService"));
+// }
+
+ /**
+ * Do not export package protected STALXPortType interface
+ * (this is a dummy interface to make JAXB include the STAL-X types)
+ * @return
+ * returns STALPortType
+ */
+ @WebEndpoint(name = "STALPort")
+ public at.gv.egiz.stal.service.STALPortType getSTALPort() {
+ return super.getPort(new QName("http://www.egiz.gv.at/wsdl/stal", "STALPort"), STALPortType.class);
+ }
+
+ /**
+ *
+ * @param features
+ * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
+ * @return
+ * returns STALPortType
+ */
+// @WebEndpoint(name = "STALPort")
+// public STALPortType getSTALPort(WebServiceFeature... features) {
+// return super.getPort(new QName("http://www.egiz.gv.at/wsdl/stal", "STALPort"), STALPortType.class, features);
+// }
+
+}
diff --git a/STALXService/src/main/java/at/gv/egiz/stalx/service/translator/STALXTranslationHandler.java b/STALXService/src/main/java/at/gv/egiz/stalx/service/translator/STALXTranslationHandler.java
new file mode 100644
index 00000000..d432b170
--- /dev/null
+++ b/STALXService/src/main/java/at/gv/egiz/stalx/service/translator/STALXTranslationHandler.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2008 Federal Chancellery Austria and
+ * Graz University of Technology
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package at.gv.egiz.stalx.service.translator;
+
+import at.buergerkarte.namespaces.cardchannel.service.ATRType;
+import at.buergerkarte.namespaces.cardchannel.service.CommandAPDUType;
+import at.buergerkarte.namespaces.cardchannel.service.ObjectFactory;
+import at.buergerkarte.namespaces.cardchannel.service.ResetType;
+import at.buergerkarte.namespaces.cardchannel.service.ResponseAPDUType;
+import at.buergerkarte.namespaces.cardchannel.service.ScriptType;
+import at.buergerkarte.namespaces.cardchannel.service.VerifyAPDUType;
+import at.gv.egiz.stal.STALRequest;
+import at.gv.egiz.stal.STALResponse;
+import at.gv.egiz.stal.ext.APDUScriptRequest;
+import at.gv.egiz.stal.ext.APDUScriptRequest.RequestScriptElement;
+import at.gv.egiz.stal.ext.APDUScriptResponse;
+import at.gv.egiz.stal.service.translator.STALTranslator;
+import at.gv.egiz.stal.service.translator.TranslationException;
+import at.gv.egiz.stal.service.types.RequestType;
+import at.gv.egiz.stal.service.types.ResponseType;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.xml.bind.JAXBElement;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *
+ * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
+ */
+public class STALXTranslationHandler implements STALTranslator.TranslationHandler {
+
+ private static final Log log = LogFactory.getLog(STALXTranslationHandler.class);
+ ObjectFactory of;
+
+ public STALXTranslationHandler() {
+ of = new ObjectFactory();
+ }
+
+ @Override
+ public List<Class> getSupportedTypes() {
+ return Arrays.asList(new Class[]{ScriptType.class,
+ at.buergerkarte.namespaces.cardchannel.service.ResponseType.class,
+ APDUScriptRequest.class,
+ APDUScriptResponse.class});
+ }
+
+ @Override
+ public JAXBElement<? extends RequestType> translate(STALRequest request) throws TranslationException {
+ if (request instanceof APDUScriptRequest) {
+ log.trace("translate at.gv.egiz.stal.ext.APDUScriptRequest -> at.buergerkarte.namespaces.cardchannel.service.ScriptType");
+
+ ScriptType scriptT = of.createScriptType();
+
+ List<RequestScriptElement> script = ((APDUScriptRequest) request).getScript();
+ for (RequestScriptElement requestScriptElement : script) {
+ if (requestScriptElement instanceof APDUScriptRequest.Reset) {
+ scriptT.getResetOrCommandAPDUOrVerifyAPDU().add(of.createResetType());
+ } else if (requestScriptElement instanceof APDUScriptRequest.Command) {
+ APDUScriptRequest.Command cmd = (APDUScriptRequest.Command) requestScriptElement;
+ CommandAPDUType commandAPDUType = of.createCommandAPDUType();
+ commandAPDUType.setSequence(BigInteger.valueOf(cmd.getSequence()));
+ commandAPDUType.setValue(cmd.getCommandAPDU());
+ commandAPDUType.setExpectedSW(cmd.getExpectedSW());
+ scriptT.getResetOrCommandAPDUOrVerifyAPDU().add(commandAPDUType);
+ } else {
+ log.error("invalid requestScriptElement " + requestScriptElement.getClass());
+ throw new TranslationException(requestScriptElement.getClass());
+ }
+ }
+
+ return of.createScript(scriptT);
+ } else {
+ log.error("cannot translate " + request.getClass());
+ throw new TranslationException(request.getClass());
+ }
+ }
+
+ @Override
+ public STALRequest translate(RequestType request) throws TranslationException {
+ if (request instanceof ScriptType) {
+
+ log.trace("translate at.buergerkarte.namespaces.cardchannel.service.ScriptType -> at.gv.egiz.stal.ext.APDUScriptRequest");
+
+ List<Object> resetOrCommandAPDUOrVerifyAPDU = ((ScriptType) request).getResetOrCommandAPDUOrVerifyAPDU();
+ List<APDUScriptRequest.RequestScriptElement> requestScript = new ArrayList<APDUScriptRequest.RequestScriptElement>();
+
+ for (Object element : resetOrCommandAPDUOrVerifyAPDU) {
+
+ if (element instanceof ResetType) {
+
+ requestScript.add(new APDUScriptRequest.Reset());
+
+ } else if (element instanceof CommandAPDUType) {
+
+ CommandAPDUType commandAPDU = (CommandAPDUType) element;
+ int sequence = (commandAPDU.getSequence() != null)
+ ? commandAPDU.getSequence().intValue()
+ : 0;
+
+ requestScript.add(
+ new APDUScriptRequest.Command(
+ sequence,
+ commandAPDU.getValue(),
+ commandAPDU.getExpectedSW()));
+
+ } else if (element instanceof VerifyAPDUType) {
+ log.error("CardChannel script command 'VerifyAPDU' not implemented.");
+ throw new TranslationException(VerifyAPDUType.class);
+ } else {
+ log.error("invalid requestScriptElement element " + element.getClass());
+ throw new TranslationException(element.getClass());
+ }
+ }
+
+ return new APDUScriptRequest(requestScript);
+
+ } else {
+ log.error("cannot translate " + request.getClass());
+ throw new TranslationException(request.getClass());
+ }
+ }
+
+ @Override
+ public JAXBElement<? extends ResponseType> translate(STALResponse response) throws TranslationException {
+ if (response instanceof APDUScriptResponse) {
+ log.trace("translate at.gv.egiz.stal.ext.APDUScriptResponse -> at.buergerkarte.namespaces.cardchannel.service.ResponseType");
+ at.buergerkarte.namespaces.cardchannel.service.ResponseType responseT = of.createResponseType();
+ List<APDUScriptResponse.ResponseScriptElement> responseScript = ((APDUScriptResponse) response).getScript();
+
+ for (APDUScriptResponse.ResponseScriptElement element : responseScript) {
+
+ if (element instanceof APDUScriptResponse.ATR) {
+
+ byte[] atr = ((APDUScriptResponse.ATR) element).getAtr();
+
+ ATRType atrType = of.createATRType();
+ atrType.setValue(atr);
+ atrType.setRc(BigInteger.ZERO);
+ responseT.getATROrResponseAPDU().add(atrType);
+
+ } else if (element instanceof APDUScriptResponse.Response) {
+
+ APDUScriptResponse.Response resp = (APDUScriptResponse.Response) element;
+
+ ResponseAPDUType responseAPDUType = of.createResponseAPDUType();
+ responseAPDUType.setSequence(BigInteger.valueOf(resp.getSequence()));
+ responseAPDUType.setRc(BigInteger.valueOf(resp.getRc()));
+ responseAPDUType.setSW(resp.getSw());
+ responseAPDUType.setValue(resp.getApdu());
+
+ responseT.getATROrResponseAPDU().add(responseAPDUType);
+ } else {
+ log.error("invalid responseScriptElement " + element.getClass());
+ throw new TranslationException(element.getClass());
+ }
+ }
+ return of.createResponse(responseT);
+ } else {
+ log.error("cannot translate " + response.getClass());
+ throw new TranslationException(response.getClass());
+ }
+ }
+
+ @Override
+ public STALResponse translate(ResponseType response) throws TranslationException {
+ if (response instanceof at.buergerkarte.namespaces.cardchannel.service.ResponseType) {
+ log.trace("translate at.buergerkarte.namespaces.cardchannel.service.ResponseType -> at.gv.egiz.stal.ext.APDUScriptResponse");
+
+ List<Object> atrOrResponseAPDU = ((at.buergerkarte.namespaces.cardchannel.service.ResponseType) response).getATROrResponseAPDU();
+ List<APDUScriptResponse.ResponseScriptElement> responseScript = new ArrayList<APDUScriptResponse.ResponseScriptElement>();
+
+ for (Object object : atrOrResponseAPDU) {
+ if (object instanceof ATRType) {
+ byte[] atr = ((ATRType) object).getValue();
+ responseScript.add(new APDUScriptResponse.ATR(atr));
+ } else if (object instanceof ResponseAPDUType) {
+ ResponseAPDUType respAPDU = (ResponseAPDUType) object;
+ int sequence = (respAPDU.getSequence() != null)
+ ? respAPDU.getSequence().intValue()
+ : 0;
+ int rc = (respAPDU.getRc() != null)
+ ? respAPDU.getRc().intValue()
+ : 0;
+ responseScript.add(new APDUScriptResponse.Response(sequence,
+ respAPDU.getValue(),
+ respAPDU.getSW(),
+ rc));
+ } else {
+ log.error("invalid responseScriptElement " + object.getClass());
+ throw new TranslationException(object.getClass());
+ }
+ }
+ return new APDUScriptResponse(responseScript);
+
+ } else {
+ log.error("cannot translate " + response.getClass());
+ throw new TranslationException(response.getClass());
+ }
+ }
+}
diff --git a/STALXService/src/main/resources/wsdl/CardChannel.xsd b/STALXService/src/main/resources/wsdl/CardChannel.xsd
new file mode 100644
index 00000000..2dbc558e
--- /dev/null
+++ b/STALXService/src/main/resources/wsdl/CardChannel.xsd
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.buergerkarte.at/cardchannel"
+ xmlns:tns="http://www.buergerkarte.at/cardchannel"
+ elementFormDefault="qualified"
+ xmlns:stal="http://www.egiz.gv.at/stal">
+
+ <xs:import namespace="http://www.egiz.gv.at/stal" schemaLocation="stal.xsd"/>
+
+ <xs:annotation>
+ <xs:documentation>Schema for transparent access to cards using a BKU and the CardChannel
+ infobox</xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="Script" type="tns:ScriptType" substitutionGroup="stal:OtherRequest"/>
+ <xs:element name="Response" type="tns:ResponseType" substitutionGroup="stal:OtherResponse"/>
+ <xs:element name="Grunddaten" type="tns:AttributeList"/>
+ <xs:element name="EHIC" type="tns:AttributeList"/>
+ <xs:element name="Status" type="tns:AttributeList"/>
+ <xs:element name="SV-Personenbindung" type="xs:hexBinary"/>
+
+ <xs:complexType name="ScriptType">
+ <xs:annotation>
+ <xs:documentation>extends abstract stal:RequestType</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="stal:RequestType">
+ <xs:annotation>
+ <xs:documentation>Contains the script to be executed by the BKU</xs:documentation>
+ </xs:annotation>
+ <xs:choice maxOccurs="unbounded" minOccurs="1">
+ <xs:element name="Reset" type="tns:ResetType"/>
+ <xs:element name="CommandAPDU" type="tns:CommandAPDUType"/>
+ <xs:element name="VerifyAPDU" type="tns:VerifyAPDUType"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="ResponseType">
+ <xs:annotation>
+ <xs:documentation>extends abstract stal:ResponseType</xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="stal:ResponseType">
+ <xs:annotation>
+ <xs:documentation>Contains the result of the script executed by the
+ BKU</xs:documentation>
+ </xs:annotation>
+ <xs:choice maxOccurs="unbounded" minOccurs="1">
+ <xs:element name="ATR" type="tns:ATRType"/>
+ <xs:element name="ResponseAPDU" type="tns:ResponseAPDUType"/>
+ </xs:choice>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="ResetType">
+ <xs:annotation>
+ <xs:documentation>Reset the icc and sequence counter</xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="cold" type="xs:boolean" default="true"/>
+ </xs:complexType>
+
+ <xs:complexType name="CommandAPDUType">
+ <xs:annotation>
+ <xs:documentation>Contains a sequence of bytes send as command APDU to the
+ icc</xs:documentation>
+ </xs:annotation>
+ <xs:simpleContent>
+ <xs:extension base="xs:hexBinary">
+ <xs:attribute name="sequence" type="xs:positiveInteger" use="required"/>
+ <xs:attribute name="of" type="xs:positiveInteger" use="required"/>
+ <xs:attribute name="expectedSW" type="xs:hexBinary"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="VerifyAPDUType">
+ <xs:annotation>
+ <xs:documentation>Contains a sequence of bytes send as command APDU to the icc after a
+ PIN entered by the user has been incorporated into the APDU</xs:documentation>
+ </xs:annotation>
+ <xs:simpleContent>
+ <xs:extension base="xs:hexBinary">
+ <xs:attribute name="sequence" type="xs:positiveInteger" use="required"/>
+ <xs:attribute name="of" type="xs:positiveInteger" use="required"/>
+ <xs:attribute name="expectedSW" type="xs:hexBinary"/>
+ <xs:attribute name="message" type="xs:string" use="required"/>
+ <xs:attribute name="format" type="xs:hexBinary" use="required"/>
+ <xs:attribute name="offset" type="xs:nonNegativeInteger" use="required"/>
+ <xs:attribute name="timeout" type="xs:nonNegativeInteger" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="ATRType">
+ <xs:annotation>
+ <xs:documentation>Contains the ATR received as reponse to a Reset
+ command</xs:documentation>
+ </xs:annotation>
+ <xs:simpleContent>
+ <xs:extension base="xs:hexBinary">
+ <xs:attribute name="rc" type="xs:integer" default="0"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="ResponseAPDUType">
+ <xs:annotation>
+ <xs:documentation>Contains a sequence of bytes received from the card as response
+ APDU</xs:documentation>
+ </xs:annotation>
+ <xs:simpleContent>
+ <xs:extension base="xs:hexBinary">
+ <xs:attribute name="sequence" type="xs:positiveInteger" use="required"/>
+ <xs:attribute name="rc" type="xs:integer" default="0"/>
+ <xs:attribute name="SW" type="xs:hexBinary" default="9000"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="AttributeList">
+ <xs:annotation>
+ <xs:documentation>Contains a list of attributes</xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="Attribute" type="tns:AttributeType" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="AttributeType">
+ <xs:annotation>
+ <xs:documentation>Contains an attribute converted from ASN.1</xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="Integer" type="xs:integer" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="Latin1String" type="xs:string" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="UTF8String" type="xs:string" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="NumericString" type="xs:string" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="PrintableString" type="xs:string" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="GeneralizedTime" type="xs:dateTime" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="Date" type="xs:string" minOccurs="0" maxOccurs="1"/>
+ </xs:sequence>
+ <xs:attribute name="oid" type="xs:string" use="required"/>
+ </xs:complexType>
+
+</xs:schema>
diff --git a/STALXService/src/main/resources/wsdl/stal.xsd b/STALXService/src/main/resources/wsdl/stal.xsd
new file mode 100644
index 00000000..fd4ad4e3
--- /dev/null
+++ b/STALXService/src/main/resources/wsdl/stal.xsd
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2008 Federal Chancellery Austria and
+ Graz University of Technology
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.egiz.gv.at/stal"
+ xmlns:tns="http://www.egiz.gv.at/stal"
+ elementFormDefault="qualified">
+ <element name="SessionId" type="string"/>
+ <element name="GetNextRequest" type="tns:GetNextRequestType"/>
+ <element name="GetNextRequestResponse" type="tns:GetNextRequestResponseType"/>
+ <element name="GetHashDataInput" type="tns:GetHashDataInputType"/>
+ <element name="GetHashDataInputResponse" type="tns:GetHashDataInputResponseType"/>
+ <element name="GetHashDataInputFault" type="tns:GetHashDataInputFaultType"/>
+
+ <!-- Abstract Request/Response to be substituted by extending schemata
+ | must be top level element for allowing substitution groups
+ |-->
+ <element name="OtherRequest" type="tns:RequestType" abstract="true"/>
+ <element name="OtherResponse" type="tns:ResponseType" abstract="true"/>
+
+ <complexType name="GetNextRequestType">
+ <!-- abstract Request/Response type not supported by JAX-WS 2.0 (jdk < 1.6.0_04)
+ <sequence>
+ <element name="Response" type="tns:ResponseType" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence-->
+ <choice maxOccurs="unbounded">
+ <element name="InfoboxReadResponse" type="tns:InfoboxReadResponseType"/>
+ <element name="SignResponse" type="tns:SignResponseType"/>
+ <element name="ErrorResponse" type="tns:ErrorResponseType"/>
+ <element ref="tns:OtherResponse"/>
+ </choice>
+ <attribute name="SessionId" type="string"/>
+ </complexType>
+ <complexType name="ResponseType" abstract="true" />
+ <complexType name="InfoboxReadResponseType">
+ <complexContent>
+ <extension base="tns:ResponseType">
+ <sequence>
+ <element name="InfoboxValue" type="base64Binary"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="SignResponseType">
+ <complexContent>
+ <extension base="tns:ResponseType">
+ <sequence>
+ <element name="SignatureValue" type="base64Binary"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="ErrorResponseType">
+ <complexContent>
+ <extension base="tns:ResponseType">
+ <sequence>
+ <element name="ErrorCode" type="int"/>
+ <element name="ErrorMessage" type="string"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="GetNextRequestResponseType">
+ <!-- abstract Request/Response type not supported by JAX-WS 2.0 (jdk < 1.6.0_04)
+ <sequence>
+ <element name="Request" type="tns:RequestType" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence-->
+ <choice maxOccurs="unbounded">
+ <element name="InfoboxReadRequest" type="tns:InfoboxReadRequestType"/>
+ <element name="SignRequest" type="tns:SignRequestType"/>
+ <element name="QuitRequest" type="tns:QuitRequestType"/>
+ <element ref="tns:OtherRequest"/>
+ </choice>
+ <attribute name="SessionId" type="string"/>
+ </complexType>
+ <complexType name="RequestType" abstract="true"/>
+ <complexType name="InfoboxReadRequestType">
+ <complexContent>
+ <extension base="tns:RequestType">
+ <sequence>
+ <element name="InfoboxIdentifier">
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="Certificates"/>
+ <enumeration value="IdentityLink"/>
+ <enumeration value="Mandates"/>
+ </restriction>
+ </simpleType>
+ </element>
+ <element name="DomainIdentifier" type="anyURI" minOccurs="0"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="SignRequestType">
+ <complexContent>
+ <extension base="tns:RequestType">
+ <sequence>
+ <element name="KeyIdentifier">
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="SecureSignatureKeypair"/>
+ <enumeration value="CertifiedKeypair"/>
+ </restriction>
+ </simpleType>
+ </element>
+ <element name="SignedInfo" type="base64Binary"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+ <complexType name="QuitRequestType">
+ <complexContent>
+ <extension base="tns:RequestType"/>
+ </complexContent>
+ </complexType>
+ <complexType name="GetHashDataInputType">
+ <sequence>
+ <element name="Reference" maxOccurs="unbounded">
+ <complexType>
+ <attribute name="ID" type="string"/>
+ </complexType>
+ </element>
+ </sequence>
+ <attribute name="SessionId" type="string"/>
+ </complexType>
+ <complexType name="GetHashDataInputResponseType">
+ <sequence>
+ <element name="Reference" maxOccurs="unbounded">
+ <complexType>
+ <simpleContent>
+ <extension base="base64Binary">
+ <attribute name="ID" type="string"/>
+ <attribute name="MimeType" type="string" use="optional"/>
+ <attribute name="Encoding" type="string" use="optional"/>
+ </extension>
+ </simpleContent>
+ </complexType>
+ </element>
+ </sequence>
+ <attribute name="SessionId" type="string"/>
+ </complexType>
+ <complexType name="GetHashDataInputFaultType">
+ <sequence>
+ <element name="ErrorCode" type="int"/>
+ <element name="ErrorMessage" type="string"/>
+ </sequence>
+ </complexType>
+</schema>
diff --git a/STALXService/src/main/resources/wsdl/stalx.wsdl b/STALXService/src/main/resources/wsdl/stalx.wsdl
new file mode 100644
index 00000000..4c27f107
--- /dev/null
+++ b/STALXService/src/main/resources/wsdl/stalx.wsdl
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2008 Federal Chancellery Austria and
+ Graz University of Technology
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<definitions name="stal" targetNamespace="http://www.egiz.gv.at/wsdl/stal"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.egiz.gv.at/wsdl/stal"
+ xmlns:stal="http://www.egiz.gv.at/stal"
+ xmlns:cc="http://www.buergerkarte.at/cardchannel"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+ <types>
+ <xsd:schema targetNamespace="http://www.egiz.gv.at/wsdl/stal">
+ <xsd:import namespace="http://www.egiz.gv.at/stal" schemaLocation="stal.xsd"/>
+ </xsd:schema>
+ <xsd:schema targetNamespace="http://www.egiz.gv.at/wsdl/stal-extended">
+ <xsd:import namespace="http://www.buergerkarte.at/cardchannel" schemaLocation="CardChannel.xsd"/>
+ </xsd:schema>
+ </types>
+ <message name="ConnectRequest">
+ <part name="part1" element="stal:SessionId"/>
+ </message>
+ <message name="NextRequestRequest">
+ <part name="part1" element="stal:GetNextRequest"/>
+ </message>
+ <message name="NextRequestResponse">
+ <part name="part1" element="stal:GetNextRequestResponse"/>
+ </message>
+ <message name="GetHashDataInputRequest">
+ <part name="part1" element="stal:GetHashDataInput"/>
+ </message>
+ <message name="GetHashDataInputResponse">
+ <part name="part1" element="stal:GetHashDataInputResponse"/>
+ </message>
+ <message name="GetHashDataInputFault">
+ <part name="part1" element="stal:GetHashDataInputFault"/>
+ </message>
+ <!--message name="DummyRequest">
+ <part name="part1" element="cc:Script"/>
+ </message>
+ <message name="DummyResponse">
+ <part name="part1" element="cc:Response"/>
+ </message-->
+ <portType name="STALPortType">
+ <operation name="connect">
+ <input name="input3" message="tns:ConnectRequest"/>
+ <output name="output3" message="tns:NextRequestResponse"/>
+ </operation>
+ <operation name="nextRequest">
+ <input name="input1" message="tns:NextRequestRequest"/>
+ <output name="output1" message="tns:NextRequestResponse"/>
+ </operation>
+ <operation name="getHashDataInput">
+ <input name="input2" message="tns:GetHashDataInputRequest"/>
+ <output name="output2" message="tns:GetHashDataInputResponse"/>
+ <fault name="fault1" message="tns:GetHashDataInputFault"/>
+ </operation>
+ <!--operation name="dummyOp">
+ <input name="dummyIn" message="tns:DummyRequest"/>
+ <output name="dummyOut" message="tns:DummyResponse"/>
+ </operation-->
+ </portType>
+ <binding name="STALBinding" type="tns:STALPortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="connect">
+ <input name="input3">
+ <soap:body use="literal"/>
+ </input>
+ <output name="output3">
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="nextRequest">
+ <soap:operation/>
+ <input name="input1">
+ <soap:body use="literal"/>
+ </input>
+ <output name="output1">
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="getHashDataInput">
+ <soap:operation/>
+ <input name="input2">
+ <soap:body use="literal"/>
+ </input>
+ <output name="output2">
+ <soap:body use="literal"/>
+ </output>
+ <fault name="fault1">
+ <soap:fault name="fault1"/>
+ </fault>
+ </operation>
+ <!--operation name="dummyOp">
+ <soap:operation/>
+ <input name="dummyIn">
+ <soap:body use="literal"/>
+ </input>
+ <output name="dummyOut">
+ <soap:body use="literal"/>
+ </output>
+ </operation-->
+ </binding>
+ <service name="STALService">
+ <port name="STALPort" binding="tns:STALBinding">
+ <soap:address location="http://localhost:3495/jxbctx/stal"/>
+ </port>
+ </service>
+</definitions>
diff --git a/STALXService/src/test/java/at/gv/egiz/stalx/service/ClientJAXBContextFactory.java b/STALXService/src/test/java/at/gv/egiz/stalx/service/ClientJAXBContextFactory.java
new file mode 100644
index 00000000..2f5c371d
--- /dev/null
+++ b/STALXService/src/test/java/at/gv/egiz/stalx/service/ClientJAXBContextFactory.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2008 Federal Chancellery Austria and
+ * Graz University of Technology
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package at.gv.egiz.stalx.service;
+
+//import com.sun.xml.bind.api.JAXBRIContext;
+//import com.sun.xml.bind.api.TypeReference;
+//import com.sun.xml.ws.api.model.SEIModel;
+//import com.sun.xml.ws.developer.JAXBContextFactory;
+import java.util.List;
+import javax.xml.bind.JAXBException;
+
+/**
+ *
+ * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
+ */
+public class ClientJAXBContextFactory { //implements JAXBContextFactory {
+
+// @Override
+// public JAXBRIContext createJAXBContext(SEIModel sei, List<Class> classesToBind, List<TypeReference> typeReferences) throws JAXBException {
+//
+// System.out.println("Using client's custom JAXBContext");
+////54 List<Class> classList = new ArrayList<Class>();
+////55 classList.addAll(classesToBind);
+////56 classList.add(Toyota.class);
+////57
+////58 List<TypeReference> refList = new ArrayList<TypeReference>();
+////59 refList.addAll(typeReferences);
+////60 refList.add(new TypeReference(new QName("","arg0"),Toyota.class));
+////61
+////62 return JAXBRIContext.newInstance(classList.toArray
+////63 (new Class[classList.size()]),
+////64 refList, null, sei.getTargetNamespace(), false, null);
+//
+// return null;
+// }
+
+}
diff --git a/STALXService/src/test/java/at/gv/egiz/stalx/service/STALServiceTest.java b/STALXService/src/test/java/at/gv/egiz/stalx/service/STALServiceTest.java
new file mode 100644
index 00000000..fda4b235
--- /dev/null
+++ b/STALXService/src/test/java/at/gv/egiz/stalx/service/STALServiceTest.java
@@ -0,0 +1,112 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package at.gv.egiz.stalx.service;
+
+import at.buergerkarte.namespaces.cardchannel.service.CommandAPDUType;
+import at.buergerkarte.namespaces.cardchannel.service.ScriptType;
+import at.gv.egiz.stal.service.types.GetNextRequestResponseType;
+import at.gv.egiz.stal.service.types.RequestType;
+import java.net.URL;
+import java.util.List;
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ *
+ * @author clemens
+ */
+@Ignore
+public class STALServiceTest {
+
+ static at.gv.egiz.stal.service.STALPortType port;
+
+ public STALServiceTest() {
+ }
+
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ // UsesJAXBContextFeature feature = new UsesJAXBContextFeature(ClientJAXBContextFactory.class);
+
+ URL wsdlLocation = new URL("http://localhost:3495/stal?wsdl");
+ QName serviceName = new QName("http://www.egiz.gv.at/wsdl/stal", "STALService");
+ STALService service = new STALService(wsdlLocation, serviceName);
+ port = service.getSTALPort();
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ }
+
+ @Before
+ public void setUp() {
+ }
+
+ @After
+ public void tearDown() {
+ }
+
+// /**
+// * Test of getSTALPort method, of class STALService.
+// */
+// @Test
+// public void testGetSTALPort() {
+// System.out.println("getSTALPort");
+// STALService instance = null;
+// STALPortType expResult = null;
+// STALPortType result = instance.getSTALPort();
+// assertEquals(expResult, result);
+// // TODO review the generated test code and remove the default call to fail.
+// fail("The test case is a prototype.");
+// }
+ @Test
+ public void testConnect() {
+ System.out.println("connecting to STAL WS [TestSession] ...");
+ GetNextRequestResponseType wsResponse = port.connect("TestSession");
+
+ List<JAXBElement<? extends RequestType>> stalRequests = wsResponse.getInfoboxReadRequestOrSignRequestOrQuitRequest();
+ System.out.println("Received " + wsResponse.getClass() + " containing " + stalRequests.size() + " requests");
+ for (JAXBElement<? extends RequestType> jAXBElement : stalRequests) {
+ System.out.println(" STALRequest " + jAXBElement.getValue().getClass());
+ RequestType request = jAXBElement.getValue();
+ if (request instanceof ScriptType) {
+ List<Object> apdus = ((ScriptType) request).getResetOrCommandAPDUOrVerifyAPDU();
+ for (Object object : apdus) {
+ System.out.println(" - APDU: " + new String(((CommandAPDUType) object).getValue()));
+// System.out.println(" APDU: " + object.getClass());
+ }
+ }
+ }
+ }
+
+
+// GetHashDataInputType hdi = stalOF.createGetHashDataInputType();
+// hdi.setSessionId("TestSession");
+// hdi.getReference().add(new GetHashDataInputType.Reference());
+// GetHashDataInputResponseType hdiResponse = port.getHashDataInput(hdi);
+// List<GetHashDataInputResponseType.Reference> l = hdiResponse.getReference();
+// System.out.println("HDI references: " + l.size());
+// for (GetHashDataInputResponseType.Reference reference : l) {
+// System.out.println(" Reference " + reference.getID());
+// }
+
+
+// ScriptType part2 = ccOF.createScriptType();
+// ResponseType scriptResp = ccOF.createResponseType();
+// GetNextRequestResponseType stalReqResp =
+// port.nextRequest();
+// // TODO process result here
+// generated.ResponseType result2 = port.runAPDUScript(part2);
+// System.out.println("Result = " + result2);
+
+
+
+
+} \ No newline at end of file