diff options
Diffstat (limited to 'STALXService/src/main/java/at')
14 files changed, 1756 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> + * <complexType name="ATRType"> + *   <simpleContent> + *     <extension base="<http://www.w3.org/2001/XMLSchema>hexBinary"> + *       <attribute name="rc" type="{http://www.w3.org/2001/XMLSchema}integer" default="0" /> + *     </extension> + *   </simpleContent> + * </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> + * <complexType name="AttributeList"> + *   <complexContent> + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + *       <sequence> + *         <element name="Attribute" type="{http://www.buergerkarte.at/cardchannel}AttributeType" maxOccurs="unbounded" minOccurs="0"/> + *       </sequence> + *     </restriction> + *   </complexContent> + * </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> + * <complexType name="AttributeType"> + *   <complexContent> + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + *       <sequence> + *         <element name="Integer" type="{http://www.w3.org/2001/XMLSchema}integer" minOccurs="0"/> + *         <element name="Latin1String" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + *         <element name="UTF8String" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + *         <element name="NumericString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + *         <element name="PrintableString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + *         <element name="GeneralizedTime" type="{http://www.w3.org/2001/XMLSchema}dateTime" minOccurs="0"/> + *         <element name="Date" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + *       </sequence> + *       <attribute name="oid" use="required" type="{http://www.w3.org/2001/XMLSchema}string" /> + *     </restriction> + *   </complexContent> + * </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> + * <complexType name="CommandAPDUType"> + *   <simpleContent> + *     <extension base="<http://www.w3.org/2001/XMLSchema>hexBinary"> + *       <attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + *       <attribute name="of" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + *       <attribute name="expectedSW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" /> + *     </extension> + *   </simpleContent> + * </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> + * <complexType name="ResetType"> + *   <complexContent> + *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + *       <attribute name="cold" type="{http://www.w3.org/2001/XMLSchema}boolean" default="true" /> + *     </restriction> + *   </complexContent> + * </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> + * <complexType name="ResponseAPDUType"> + *   <simpleContent> + *     <extension base="<http://www.w3.org/2001/XMLSchema>hexBinary"> + *       <attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + *       <attribute name="rc" type="{http://www.w3.org/2001/XMLSchema}integer" default="0" /> + *       <attribute name="SW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" default="9000" /> + *     </extension> + *   </simpleContent> + * </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> + * <complexType name="ResponseType"> + *   <complexContent> + *     <extension base="{http://www.egiz.gv.at/stal}ResponseType"> + *       <choice maxOccurs="unbounded"> + *         <element name="ATR" type="{http://www.buergerkarte.at/cardchannel}ATRType"/> + *         <element name="ResponseAPDU" type="{http://www.buergerkarte.at/cardchannel}ResponseAPDUType"/> + *       </choice> + *     </extension> + *   </complexContent> + * </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> + * <complexType name="ScriptType"> + *   <complexContent> + *     <extension base="{http://www.egiz.gv.at/stal}RequestType"> + *       <choice maxOccurs="unbounded"> + *         <element name="Reset" type="{http://www.buergerkarte.at/cardchannel}ResetType"/> + *         <element name="CommandAPDU" type="{http://www.buergerkarte.at/cardchannel}CommandAPDUType"/> + *         <element name="VerifyAPDU" type="{http://www.buergerkarte.at/cardchannel}VerifyAPDUType"/> + *       </choice> + *     </extension> + *   </complexContent> + * </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> + * <complexType name="VerifyAPDUType"> + *   <simpleContent> + *     <extension base="<http://www.w3.org/2001/XMLSchema>hexBinary"> + *       <attribute name="sequence" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + *       <attribute name="of" use="required" type="{http://www.w3.org/2001/XMLSchema}positiveInteger" /> + *       <attribute name="expectedSW" type="{http://www.w3.org/2001/XMLSchema}hexBinary" /> + *       <attribute name="message" use="required" type="{http://www.w3.org/2001/XMLSchema}string" /> + *       <attribute name="format" use="required" type="{http://www.w3.org/2001/XMLSchema}hexBinary" /> + *       <attribute name="offset" use="required" type="{http://www.w3.org/2001/XMLSchema}nonNegativeInteger" /> + *       <attribute name="timeout" use="required" type="{http://www.w3.org/2001/XMLSchema}nonNegativeInteger" /> + *     </extension> + *   </simpleContent> + * </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..d93da722 --- /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, +              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()); +    } +  } +} | 
