Title: Data Transport Standard
1Data Transport Standard
- Nathan Chitty - PESC
- Gary Sandler - PESC
2Data Transport Standard - DTS
- DTS uses Internet technologies to facilitate real
time data exchange and transaction processing - DTS builds on stable technologies, not specific
products - DTS, once implemented, reduces programming and
per-transaction costs through standardization
3DTS Defined
- Data Transport Standard is a specification not a
product - Established by Postsecondary Education Standards
Council (PESC) for exchanging data for - Inquiries
- Reports
- Transactions
4DTS Defined
- A specification for an adjunct to or a
replacement for existing data transport
mechanisms - PGP / GnuPG encryption
- SecretAgent w/ Email
- FTP and SecureFTP
5DTS Benefits
- A Web Services implementation
- Delivery confirmation included no guessing
- All requests get a response
- All submissions get an answer of some kind
- Facilitates real time data exchange
6DTS Benefits
- Includes automatic data encryption
- Uses digital signature standards
- Platform independent
- Strong authentication with non-repudiation
7Benefits To System Providers
- Add value to schools systems
- Schools want transport added to systems and are
generally not concerned with the technologies - Easier to build one transport protocol for all
recipients - Just as CommonRecord created the drive to build
one XML format
8Benefits to Service Providers
- As everyone implements DTS, the need to support
other transports will drop - If any school implements DTS, service providers
will have to support it - Also provides a single communication
infrastructure option for internal systems
9DTS Specification
- Specification covers
- Technical interchange rules and processes
- Recommended best practices
- Technical Specification is the pure Simple Object
Access Protocol (SOAP) interface - Implementation Guide is for both .Net and Java
reference implementations
10DTS Specification
- Reference implementation examples are available
- Specification does not cover
- Business rules for transaction processing
- Operational oversight, monitoring or escalation
11Data Transport Issues in Higher Ed
- E-mail is not reliable or flexible enough
- No guarantee of delivery
- No guarantee of order of delivery for sequence
dependent data - No automatic confirmation of receipt or facility
for retransmit
12Data Transport Issues in Higher Ed
- E-mail is not reliable or flexible enough
(continued) - No synchronous response available
- Email size limitations
13Data Transport Issues in Higher Ed
- FTP data exchange has own challenges
- Possible to overwrite earlier files
- No confirmation of receipt
- No synchronous response
14Data Transport Issues in Higher Ed
- Encryption today is always separate and subject
to its own - Issues
- Maintenance
- Failures
15DTS Addresses These Transport Issues
- DTS addresses
- The confirmation issue with a send-receive
protocol confirmation is built in - The order of delivery problem by actively
delivering and receiving the data no
unconfirmed hand-offs
16DTS Addresses These Transport Issues
- DTS addresses
- The size problem through data compression
- The FTP overwrite problem by not using filenames
17DTS Addresses These Transport Issues
- DTS addresses
- The lack of a synchronous response by building in
a required synchronous response, even if only for
handling status - The encryption issue by using standard HTTPS for
encryption the same technology as for online
banking
18DTS Technical Workgroup
- Task Create a written specification for
real-time exchange of data between organizations - Meets business requirements
- Standards based
- Standard technologies (Java, .Net)
- Payload Insensitive
- Secure and reliable
19DTS Technologies
- Global XML Web Service Architecture (GXA),
generally accepted as the foundation for building
Web Services - WSDL (Web Service Definition Language)
- SOAP (Simple Object Access Protocol)
- WS-I (Web Service Interoperability)
- WS-S (Web Service Security)
20DTS Technologies
- WS-Security (Digital Signatures)
- Strong authentication with non-repudiation
- X.509 encryption keys and certificate authorities
- SSL encryption of HTTP streams
21Anticipated Architectures
- Immediate processing
- Request and processed Result Response
- Push/Push deferred processing
- Request and Acknowledge Response
- Request with Result and Acknowledge Response
- Push/Pull deferred processing
- Request and Acknowledge Response (just send)
- Request for Result and Result Response
22Immediate
23Push/Push
24Push/Pull
25DTS Analogy
- DTS is the definition of the Pipe and the
structure of its contents - The Pipe is the internet
- The content is SOAP
- The end points/junctions are Web Services
- The sources are Web Service enabled clients
26DTS Analogy
- DTS defines how others can connect to the Pipe
already installed - Any connections must have certain threads
- Any connections must handle two way traffic
independent of how the traffic will be used
27DTS Analogy
- By knowing about the pipe and the type of
connections, any plumber can use his/her own
tools to make connections just so long as the
threads match
28Extending the Analogy
- We all have plumbing and fixtures
- Very unlikely we all have the same type of
fixtures - Yet our water companies still deliver to us all
- All our fixtures use (process) it
- All our drains return it
29How Did We Do It?
- Created basic HelloWorld service and client
- Worked interoperable
- Added simple Headers to HelloWorld
- Was not interoperable
- Added complex Header to HelloWorld
- Was not interoperable
30Why SOAP Headers
- To answer routing and processing expectations
without opening the payload - Remain payload insensitive
- Allow extensibility for new processes
31DTS SOAP Headers
- DTSRequestRouting
- DTSRequestServiceExpectation
- DTSRequestPayloadType
- DTSRequestSignature
- DTSResponseRouting
- DTSResponseAcknowledge
- DTSResponsePayloadType
- DTSResponseSignature
32Convoluted Filename vs Header Elements
- A B ltX.Y.ZMgt
- A File Type, B Encrytption, X.Y.Z key
identifier, M Unique message ID - Encryption unnecessary because using HTTPS
- DTSRequestPayloadType A
- DTSRequestRouting
- SourceIDSubCode X, SourceID Y(.Z)
- UUID M
33Interop Problem with SOAP Headers
- xsitype attribute in Header elements
- Java includes and requires this attribute
- .Net does not
34All about SOAP
- ltsoapHeadergt
- ltDTSRequestPayloadType xsitype"DTSRequestPa
yloadType" xmlns"http//www.datatransportstandar
d.com"gt - ltvaluegtCRC01Requestlt/valuegt
- lt/DTSRequestPayloadCodegt
35SOAP is the Key
- The SOAP transmitted across the wire is of
primary importance - Element names
- Type attribute
- Not Namespace moniker (Java uses one by default,
.Net does not) - How you get the correct SOAP is not important
36SOAP Differences That Do Not Matter
Java ltns1DTSRequestSignature soapenvmustUnder
stand"0" xsitype"ns1DTSRequestSignature"
xmlnsns1"http//www.datatransportstandard.com"gt
ltns1valuegtSignatureValuelt/ns1valuegt lt/ns1DTS
RequestSignaturegt .Net ltDTSRequestSignature
xsitype"DTSRequestSignature"
xmlns"http//www.datatransportstandard.com"gt lt
valuegtSignatureValuelt/valuegt lt/DTSRequestSignature
gt
37Reference Implementation Architecture
- Client Application
- Client Core
- Service Core
- Service Application
38Client Application
- Knows nothing of SOAP or Web Services
- Implements Client Core Interface
- Setters and Getters of DTS specific elements
- Houses specific business logic
39Client Core
- Knows nothing of business logic
- Uses properties set to construct the SOAP
- Interface for setting send and getting
returned elements - Handles the communication to Service Core- DTS
Specification
40Service Core
- Accepts transmissions from Client Core
- Implements Service Application Interface
- Setters and Getters of DTS specific elements
- Creates return SOAP
- Format return acknowledgement or data from
Service Application - Construct SOAP faults
41Service Core (continued)
- Isolated business logic
- Examples
- Invoke Service Application based on payload
- Place payload in queue
42Service Application
- Interface for setting sent and getting to be
returned elements - Houses specific business logic
- Knows nothing of SOAP or Web Services
43Connecting the layers
44Connecting the layers
45Connecting the layers
46Connecting the layers
47Connecting the layers
48Additional DTS Information
- Visit PESC at www.pesc.org
- Materials available include
- Executive summaries
- Specifications
- Reference (proof of concept) implementations
49Adding SOAP Headers
- Change WSDL Still has problems
- Create Container Classes
- Container Classes require serialization/de-seriali
zation directives
50Adding SOAP Headers
- Augment Service Code
- Augment Client Code
51Java Creating the Container Classes for the
Service (IN)
- package com.datatransportstandard.www.serializable
- import java.io.Serializable
- public class DTSRequestRouting implements
Serializable -
- private String sourceID null
- private String sourceIDCode null
- private String recipientID null
- private String recipientIDCode null
- private String uuid null
- private String transmissionDateTime null
- public String getSourceID() return sourceID
- public void setSourceID(String newSourceID)
-
- sourceID newSourceID
-
- public String getRecipientID() return
recipientID - public void setRecipientID(String
newRecipientID) -
- recipientID newRecipientID
-
- public String getRecipientIDCode() return
recipientIDCode - public void setRecipientIDCode(String
newRecipientIDCode) -
- recipientIDCode newRecipientIDCode
-
- public String getUUID() return uuid
- public void setUUID(String newUUID)
-
- uuid newUUID
52Java Creating the Container Classes for the
Service (OUT)
- public String getRecipientID() return
recipientID - public void setRecipientID(String
newRecipientID) -
- recipientID newRecipientID
-
- public String getRecipientIDCode() return
recipientIDCode - public void setRecipientIDCode(String
newRecipientIDCode) -
- recipientIDCode newRecipientIDCode
-
- public String getUUID() return uuid
- public void setUUID(String newUUID)
-
- uuid newUUID
- package com.datatransportstandard.www.serializable
- import java.io.Serializable
- public class DTSResponseRouting implements
Serializable -
- private String sourceID null
- private String sourceIDCode null
- private String recipientID null
- private String recipientIDCode null
- private String uuid null
- private String transmissionDateTime null
- public String getSourceID() return sourceID
- public void setSourceID(String newSourceID)
-
- sourceID newSourceID
-
53Java Examples (Service)
- Modify the WSDD
- ltbeanMapping languageSpecificType"javacom.datatr
ansportstandard.www.serializable.DTSRequestRouting
" qname"ns2DTSRequestRouting"
xmlnsns2"http//www.datatransport.com"/gt - ltbeanMapping languageSpecificType"javacom.datatr
ansportstandard.www.serializable.DTSResponseRoutin
g" qname"ns3DTSResponseRouting"
xmlnsns3"http//www.datatranportstandard.com"/gt - Augment the Code (inbound)
- MessageContext ctx MessageContext.getCurrentCon
text() - SOAPEnvelope requestEnv ctx.getRequestMessage(
).getSOAPEnvelope() -
- SOAPHeaderElement requestHeader
requestEnv.getHeaderByName("http//www.datatransp
ortstandard.com", - DTSRequestRouting")
- DTSRequestRouting incontainer
(DTSRequestRouting) requestHeader.getObjectValue(
) - System.out.println(SourceId
incontainer.getSourceId())
54Java Examples (Service)
- Augment the Code (outbound)
- DTSResponseRouting outcontainer new
DTSResponseRouting() - outcontainer.setSourceId(TEST SOURCE ID)
- outcontainer.setSourceIdType(TEST SOURCE ID
TYPE) -
- SOAPHeaderElement responseHeader new
SOAPHeaderElement(http//www.datatransportstandar
d.com - ,DTSResponseRouting)
- responseHeader.setObjectValue(outcontainer)
- SOAPEnvelope responseEnv ctx.getResponseMessage(
).getSOAPEnvelope() - responseEnv.addHeader(responseHeader)
55Java Examples (Client)
- Augment the Code (General)
- QName qn new QName(http//www.datatransportstan
dard.com,DTSRequestRouting) - call.registerTypeMapping(DTSRequestRouting.class,
qn, - new BeanSerializerFactory(DTSRequestRouting.c
lass, qn), - new BeanDeserializerFactory(DTSRequestRouting
.class, qn)) - QName qn1 new QName(http//www.datatranpsortsta
ndard.com,DTSResponseRouting) - call.registerTypeMapping(DTSResponseRouting.class
, qn1, - new
- BeanSerializerFactory(DTSResponseRouting.class,
qn1), - new BeanDeserializerFactory(DTSResponseRoutin
g.class, qn1))
56Java Examples (Client)
- Augment the Code (outbound)
- DTSRequestRouting outcontainer new
DTSRequestRouting() - outcontainer.setSourceId(TEST SOURCE ID)
- outcontainer.setSourceIdType(TEST SOURCE ID
TYPE) -
- SOAPHeaderElement requestHeader new
SOAPHeaderElement(http//www.datatransportstanda
rd.com, DTSRequestRouting) - requestHeader.setObjectValue(outcontainer)
- call.addHeader(requestHeader)
57Java Examples (Client)
- Augment the Code (inbound)
- SOAPEnvelope responseEnv call.getMessageContext(
).getResponseMessage().getSOAPEnvelope() - SOAPHeaderElement responseHeader
responseEnv.getHeaderByName(http//www.datatransp
ortstandard.com,DTSResposneHeader) - DTSResponseHeader incontainer
(DTSResponseHeader) responseHeader.getObjectValue(
) - System.out.println(Source Id
intcontainer.getSourceId())
58.Net Creating the Container classes for Service
- XmlTypeAttribute(Namespacehttp//www.datatransp
ortstandard.com) - XmlRootAttribute(ElementNameDTSRequestRouting,
Namespacehttp//www.datatransportstandard.com,
IsNullablefalse) - XmlInclude(typeof(DTSRequestRouting))
- public class DTSRequestRouting
System.Web.Services.Protocols.SoapHeader -
- public string UUID
- public string transmissionDateTime
- public string sourceID
- public string sourceIDCode
- public string recipientID
-
- XmlTypeAttribute(Namespacehttp//www.datatransp
ortstandard.com) - XmlRootAttribute(ElementNameDTSResponseRouting
, Namespacehttp//www.datatransportstandard.com
, IsNullablefalse) - XmlInclude(typeof(DTSResponseRouting))
- public class DTSResponseRoutingElements
System.Web.Services.Protocols.SoapHeader -
- public string UUID
- public string transmissionDateTime
59.Net Augment the Service
- Add declarations to service Class
- public DTSRequestRouting DTSRequestRoutingVal
- public DTSResponseRoutingElements DTSResponseRout
ingVal - public SoapUnknownHeader unknownHeaders
- Add serialization directives to WebMethod()
- SoapHeaderAttribute("DTSRequestRoutingVal")
- SoapHeaderAttribute("DTSResponseRoutingVal",
DirectionSoapHeaderDirection.Out) - SoapHeader("unknownHeaders")
60.Net Creating the Container classes for Client
- XmlTypeAttribute(Namespace"http//www.datatransp
ortstandard.com") - XmlRootAttribute(ElementName"DTSRequestRouting",
Namespace"http//www.datatransportstandard.com",
IsNullablefalse) - XmlInclude(typeof(DTSRequestRouting))
- public class DTSRequestRoutingElements
System.Web.Services.Protocols.SoapHeader -
- public string UUID
- public string transmissionDateTime
- public string sourceID
- public string sourceIDCode
- public string recipientID
-
- XmlTypeAttribute(Namespace"http//www.datatransp
ortstandard.com") - public class DTSRequestRouting
DTSRequestRoutingElements - XmlTypeAttribute(Namespace"http//www.datatransp
ortstandard.com") - XmlIncludeAttribute(typeof(DTSResponseRouting))
- XmlRootAttribute("DTSResponseRouting",
Namespace"http//www.datatransportstandard.com",
IsNullablefalse) - public class DTSResponseRouting
System.Web.Services.Protocols.SoapHeader -
61.Net Augment the Client
- Add declarations to Client Web Reference/Proxy
Class - public DTSRequestRoutingElements
DTSRequestRoutingVal - public DTSResponseRouting DTSResponseRoutingVal
-
- Add serialization directives to WebMethod()
- SoapHeaderAttribute("DTSRequestRoutingVal")
- SoapHeaderAttribute("DTSResponseRoutingVal",
DirectionSoapHeaderDirection.Out)
62Contact Information
We appreciate your feedback and comments. We can
be reached at
Nathan Chitty, Nelnet, Inc.(904)
281-7235nathan.chitty_at_nelnet.net Gary Sandler,
ELM Resources (510) 903-7960 gsandler_at_elmresource
s.com