From 54aa4703e3d66c5b1a63b8d925fd4c9c1766687c Mon Sep 17 00:00:00 2001 From: clemenso Date: Wed, 28 Jan 2009 19:40:11 +0000 Subject: activation git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@291 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../namespaces/cardchannel/service/ATRType.java | 100 ++++++++ .../cardchannel/service/AttributeList.java | 71 ++++++ .../cardchannel/service/AttributeType.java | 264 ++++++++++++++++++++ .../cardchannel/service/CommandAPDUType.java | 154 ++++++++++++ .../cardchannel/service/ObjectFactory.java | 172 +++++++++++++ .../namespaces/cardchannel/service/ResetType.java | 64 +++++ .../cardchannel/service/ResponseAPDUType.java | 161 +++++++++++++ .../cardchannel/service/ResponseType.java | 82 +++++++ .../namespaces/cardchannel/service/ScriptType.java | 85 +++++++ .../cardchannel/service/VerifyAPDUType.java | 266 +++++++++++++++++++++ .../cardchannel/service/package-info.java | 2 + .../at/gv/egiz/stalx/service/STALPortType.java | 45 ++++ .../java/at/gv/egiz/stalx/service/STALService.java | 73 ++++++ .../translator/STALXTranslationHandler.java | 217 +++++++++++++++++ .../src/main/resources/wsdl/CardChannel.xsd | 148 ++++++++++++ STALXService/src/main/resources/wsdl/stal.xsd | 162 +++++++++++++ STALXService/src/main/resources/wsdl/stalx.wsdl | 123 ++++++++++ .../stalx/service/ClientJAXBContextFactory.java | 52 ++++ .../at/gv/egiz/stalx/service/STALServiceTest.java | 112 +++++++++ 19 files changed, 2353 insertions(+) create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ATRType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeList.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/AttributeType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/CommandAPDUType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ObjectFactory.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResetType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseAPDUType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ResponseType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/ScriptType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/VerifyAPDUType.java create mode 100644 STALXService/src/main/java/at/buergerkarte/namespaces/cardchannel/service/package-info.java create mode 100644 STALXService/src/main/java/at/gv/egiz/stalx/service/STALPortType.java create mode 100644 STALXService/src/main/java/at/gv/egiz/stalx/service/STALService.java create mode 100644 STALXService/src/main/java/at/gv/egiz/stalx/service/translator/STALXTranslationHandler.java create mode 100644 STALXService/src/main/resources/wsdl/CardChannel.xsd create mode 100644 STALXService/src/main/resources/wsdl/stal.xsd create mode 100644 STALXService/src/main/resources/wsdl/stalx.wsdl create mode 100644 STALXService/src/test/java/at/gv/egiz/stalx/service/ClientJAXBContextFactory.java create mode 100644 STALXService/src/test/java/at/gv/egiz/stalx/service/STALServiceTest.java (limited to 'STALXService/src') 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 + * + *

Java class for ATRType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 + * + *

Java class for AttributeList complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "AttributeList", propOrder = { + "attribute" +}) +public class AttributeList { + + @XmlElement(name = "Attribute") + protected List attribute; + + /** + * Gets the value of the attribute property. + * + *

+ * 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 set method for the attribute property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getAttribute().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link AttributeType } + * + * + */ + public List getAttribute() { + if (attribute == null) { + attribute = new ArrayList(); + } + 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 + * + *

Java class for AttributeType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 + * + *

Java class for CommandAPDUType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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. + *

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 createEHIC(AttributeList value) { + return new JAXBElement(_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 createStatus(AttributeList value) { + return new JAXBElement(_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 createResponse(ResponseType value) { + return new JAXBElement(_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 createSVPersonenbindung(byte[] value) { + return new JAXBElement(_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 createScript(ScriptType value) { + return new JAXBElement(_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 createGrunddaten(AttributeList value) { + return new JAXBElement(_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 + * + *

Java class for ResetType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 + * + *

Java class for ResponseAPDUType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 + * + *

Java class for ResponseType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 atrOrResponseAPDU; + + /** + * Gets the value of the atrOrResponseAPDU property. + * + *

+ * 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 set method for the atrOrResponseAPDU property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getATROrResponseAPDU().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link ATRType } + * {@link ResponseAPDUType } + * + * + */ + public List getATROrResponseAPDU() { + if (atrOrResponseAPDU == null) { + atrOrResponseAPDU = new ArrayList(); + } + 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 + * + *

Java class for ScriptType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 resetOrCommandAPDUOrVerifyAPDU; + + /** + * Gets the value of the resetOrCommandAPDUOrVerifyAPDU property. + * + *

+ * 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 set method for the resetOrCommandAPDUOrVerifyAPDU property. + * + *

+ * For example, to add a new item, do as follows: + *

+     *    getResetOrCommandAPDUOrVerifyAPDU().add(newItem);
+     * 
+ * + * + *

+ * Objects of the following type(s) are allowed in the list + * {@link VerifyAPDUType } + * {@link ResetType } + * {@link CommandAPDUType } + * + * + */ + public List getResetOrCommandAPDUOrVerifyAPDU() { + if (resetOrCommandAPDUOrVerifyAPDU == null) { + resetOrCommandAPDUOrVerifyAPDU = new ArrayList(); + } + 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 + * + *

Java class for VerifyAPDUType complex type. + * + *

The following schema fragment specifies the expected content contained within this class. + * + *

+ * <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>
+ * 
+ * + * + */ +@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 features 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 + */ +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 getSupportedTypes() { + return Arrays.asList(new Class[]{ScriptType.class, + ResponseType.class, + APDUScriptRequest.class, + APDUScriptResponse.class}); + } + + @Override + public JAXBElement 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 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 resetOrCommandAPDUOrVerifyAPDU = ((ScriptType) request).getResetOrCommandAPDUOrVerifyAPDU(); + List requestScript = new ArrayList(); + + 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 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 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 atrOrResponseAPDU = ((at.buergerkarte.namespaces.cardchannel.service.ResponseType) response).getATROrResponseAPDU(); + List responseScript = new ArrayList(); + + 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 @@ + + + + + + + Schema for transparent access to cards using a BKU and the CardChannel + infobox + + + + + + + + + + + + extends abstract stal:RequestType + + + + + Contains the script to be executed by the BKU + + + + + + + + + + + + + extends abstract stal:ResponseType + + + + + Contains the result of the script executed by the + BKU + + + + + + + + + + + + Reset the icc and sequence counter + + + + + + + Contains a sequence of bytes send as command APDU to the + icc + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + + + Contains the ATR received as reponse to a Reset + command + + + + + + + + + + + Contains a sequence of bytes received from the card as response + APDU + + + + + + + + + + + + + Contains a list of attributes + + + + + + + + + Contains an attribute converted from ASN.1 + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + */ +public class ClientJAXBContextFactory { //implements JAXBContextFactory { + +// @Override +// public JAXBRIContext createJAXBContext(SEIModel sei, List classesToBind, List typeReferences) throws JAXBException { +// +// System.out.println("Using client's custom JAXBContext"); +////54 List classList = new ArrayList(); +////55 classList.addAll(classesToBind); +////56 classList.add(Toyota.class); +////57 +////58 List refList = new ArrayList(); +////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> stalRequests = wsResponse.getInfoboxReadRequestOrSignRequestOrQuitRequest(); + System.out.println("Received " + wsResponse.getClass() + " containing " + stalRequests.size() + " requests"); + for (JAXBElement jAXBElement : stalRequests) { + System.out.println(" STALRequest " + jAXBElement.getValue().getClass()); + RequestType request = jAXBElement.getValue(); + if (request instanceof ScriptType) { + List 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 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 -- cgit v1.2.3