← Prev in month ← Prev in thread

Split, join and message compression in CPA 3

From
Pim van der Eijk <>
Date
2010-09-07T20:15:39+00:00
ID
0C65286EC09C4BCE8376883D80C84FA1@Roussanne
Thread
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.
← Prev in month ← Prev in thread