Next in thread → Next in month →

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

From
Pim van der Eijk <>
Date
2010-09-14T13:57:08+00:00
ID
2510DA6C1A114F2D9C42EBB615D767A8@Roussanne
Thread
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:] 
Sent: 07 September 2010 
22:16
To: 
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
Next in thread → Next in month →