OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

ebcore-cppa message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: RE: [ebcore-cppa] Split, join and message compression in CPA 3


 
For reference, attached is an XSD with extensions for bundling and split/join.
There is also a sample CPP that illustrates the use of these extensions.
 
Pim


From: Pim van der Eijk [mailto:pvde@sonnenglanz.net]
Sent: 07 September 2010 22:16
To: ebcore-cppa@lists.oasis-open.org
Subject: [ebcore-cppa] Split, join and message compression in CPA 3

 
Hello,
 
Part 2 of ebMS 3.0 defines a new protocol in chapter 4 to send large messages as fragments and reassemble them after receiving the fragments.  This protocol uses a small set of configration properties (section 4.5), and the fact that this protocol is used at all needs to be indicated.
 
The proposal is to define a new group Splitting. The logical place for this seems to be in the sender and receiver bindings section of the DocExchange group, meaning:  messaging sent over a channel using this document exchange use this split, join, message compression feature.
 
In the following the predefined URI http://docs.oasis-open.org/ebxml-msg/v3.0/ns/mf/2010/04/ identifies the specific protocol defined in chapter 4 of ebMS 3.0 part 2.
 
 <!-- Split, join, message compression -->
 
 <xsd:element name="Splitting" type="tns:SplitJoinCompressType" 
  substitutionGroup="tns:DocExchangeModuleHead">
 </xsd:element>
 
 <xsd:complexType name="SplitJoinCompressType">
  <xsd:complexContent>
   <xsd:extension base="tns:DocExchangeModuleBaseType">
    <xsd:sequence>
     <xsd:element ref="tns:SplitProtocol" />
     <xsd:element ref="tns:SplitProtocolBinding" minOccurs="0" />
     <xsd:element ref="tns:FragmentSize" />
     <xsd:element ref="tns:RoutingProperties" />
     <xsd:element ref="tns:CompressionAlgorithm" minOccurs="0" />
     <xsd:element ref="tns:JoinInterval" minOccurs="0" />
    </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>
 
 <xsd:element name="SplitProtocol" type="tns:SplitProtocolType" />
 <xsd:simpleType name="SplitProtocolType" >
  <xsd:union  memberTypes="tns:non-empty-string tns:CPASplitProtocolType"/>
 </xsd:simpleType>
 <xsd:simpleType name="CPASplitProtocolType">
  <xsd:restriction base="xsd:normalizedString">
   <xsd:enumeration value="http://docs.oasis-open.org/ebxml-msg/v3.0/ns/mf/2010/04/"/>
  </xsd:restriction>
 </xsd:simpleType>
 
 <xsd:element name="SplitProtocolBinding" type="tns:non-empty-string" />
 
 <xsd:element name="FragmentSize" type="xsd:positiveInteger" />
 <xsd:element name="RoutingProperties" >
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element ref="tns:Property" maxOccurs="unbounded" />
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
 
 <xsd:element name="Property"  type="tns:non-empty-string" />
 
 <xsd:element name="CompressionAlgorithm" type="xsd:string" />
 <xsd:simpleType name="CompressionAlgorithmType">
  <xsd:union  memberTypes="tns:non-empty-string tns:CPACompressionAlgorithmType"/>
 </xsd:simpleType>
 <xsd:simpleType name="CPACompressionAlgorithmType">
  <xsd:restriction base="tns:non-empty-string" >
   <xsd:enumeration value="gzip" />
   <xsd:enumeration value="compress" />
   <xsd:enumeration value="deflate" />
   <xsd:enumeration value="identity" />
  </xsd:restriction>
 </xsd:simpleType>
 
 <xsd:element name="JoinInterval"  type="xsd:duration" />
The following example shows how it is used.   The example sets a maximum fragment size of 1 MB.   Gzip compression is used and the receiving MSH has 10 hours to reassemble all fragments.
 
      <ebXMLSenderBinding version="3.0">
        <SenderNonRepudiation>
          <NonRepudiationProtocol>wss-v1.1-spec-errata-os-X509TokenProfile</NonRepudiationProtocol>
          <HashFunction>http://www.w3.org/2000/09/xmldsig#sha1</HashFunction>
          <SignatureAlgorithm>http://www.w3.org/2000/09/xmldsig#rsa-sha1</SignatureAlgorithm>
          <SigningCertificateRef certId="Buyer_SigningCert"/>
        </SenderNonRepudiation>
        <ReliableMessaging>
          <Retries>3</Retries>
          <RetryInterval>PT2H</RetryInterval>
          <MessageOrderSemantics>NotGuaranteed</MessageOrderSemantics>
        </ReliableMessaging>
        <Splitting>
          <SplitProtocol>http://docs.oasis-open.org/ebxml-msg/v3.0/ns/mf/2010/04/</SplitProtocol>
          <FragmentSize>1000000</FragmentSize>
          <RoutingProperties>
            <Property>foo</Property>
            <Property>bar</Property>
          </RoutingProperties>
          <CompressionAlgorithm>gzip</CompressionAlgorithm>
          <JoinInterval>PT10H</JoinInterval>
        </Splitting>
      </ebXMLSenderBinding>
In the context of a version 3.0 ebXMLSenderBinding or ebXMLReceiverBinding container, the default value for the SplitProtocolBinding is the binding defined in section 4.4.2 of ebMS 3.0 Part 2.
In this example the ebMS message properties "foo" and "bar" are to be copied from the large split message to each fragment.
 
 
 
 

cppa-3.0-pvde-with-bundling-and-split-join.xsd

bindings.cpp - with bundling-and-split-join.xml



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]