Personal tools
You are here: Home GRIA Documentation Documentation 5.2 Reference Manuals OGSA-DAI User Guide Developers' Guide Client Developer Using the OGSA-DAI API Configuration of an OGSA-DAI client

6.1.2.2. Configuration of an OGSA-DAI client

Up one level
Changes that must be made to an OGSA-DAI client application to work with the GRIA OGSA-DAI Service

Bundling JAR files

In order to use the OGSA-DAI API at a GRIA OGSA-DAI service you must bundle the following JAR files with your application:

From the GRIA client distribution:

  • activation-1.1.jar
  • addressing-itinnov-8.jar
  • axis-1.4-itinnov-3.jar
  • axis-jaxrpc-1.4.jar
  • axis-saaj-1.4.jar
  • axis-wsdl4j-1.5.1.jar
  • commons-codec-1.2.jar
  • commons-discovery-0.4.jar
  • commons-httpclient-3.0.1.jar
  • commons-logging-1.0.4.jar
  • gria-account-common-5.2.jar
  • gria-client-helpers-5.2.jar
  • gria-infra-common-5.2.jar
  • gria-infra-dataresource-common-5.2.jar
  • gria-membership-client-5.2.jar
  • gria-membership-common-5.2.jar
  • gria-pbac-common-5.2.jar
  • gria-sla-common-5.2.jar
  • log4j-1.2.14.jar
  • mail-1.4.jar
  • opensaml-1.1-itinnov-1.jar
  • wss4j-1.5.0-itinnov-3.jar
  • xalan-2.7.0.jar
  • xercesImpl-2.7.1.jar
  • xmlsec-1.4.1.jar

From the GRIA OGSA-DAI Client and client-handler distributions:

  • gria-ogsadai-clienthandlers-5.2.jar
  • gria-ogsadai-client-5.2.jar

If you have an existing OGSA-DAI client application then you will already be using some of the jars listed above and you should carefully choose which ones to take from where. The GRIA jars have been highlighted in bold in the lists above.

Configuring the Implementation Factory

GRIA uses an ImplementationFactory class to locate implementations for a given interface. You should add the following lines to an implementationfactory.properties file in your classpath:

uk.ac.soton.ecs.iam.grid.comms.client.helpers.UserInputHandler = uk.ac.soton.itinnovation.grid.client.helpers.ServiceInputHandler
uk.ac.soton.itinnovation.grid.utils.Transport = uk.ac.soton.ecs.iam.grid.comms.client.AxisTransport
uk.ac.soton.itinnovation.grid.comms.client.TokenCache = uk.ac.soton.itinnovation.grid.client.staterepos.SAMLTokenCache

Setting the Keystore

The message handlers need to use a certificate to sign all outgoing SOAP messages. Information about which certificate to use is held in a crypto.properties file loaded from the classpath. Ideally, your application should prompt the user for a keystore and generate this file automatically.

A sample crypto.properties file is shown below:

org.apache.ws.security.crypto.merlin.file=/home/bob/my-keystore.ks
org.apache.ws.security.crypto.merlin.keystore.password=password
org.apache.ws.security.crypto.merlin.keystore.alias=Bob
org.apache.ws.security.crypto.merlin.alias.password=password
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=JKS

The GRIA Client generates a crypto.properties file the first time it is run, saving it in the conf directory relative to the gridcli executable. If you have used the GRIA Client before you can use this file to test your OGSA-DAI application.

Note that your application will need to tell Java to use your keystore before making any calls to OGSA-DAI. This can be done by using the OgsaDaiSSLHelper class once on application startup:

OgsaDaiSSLHelper.setupKeystore();

Configuring the WSSD

Axis loads a client-config.wsdd file from the classpath to retrieve information about the message handler chains you wish to use in your application.

A suitable client-config.wsdd file is shown below and has been included in the client-handlers package. If you already have such a file in your application you will need to adapt it to include the sections shown in this example.

<?xml version='1.0'?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:grid-acct="http://www.it-innovation.soton.ac.uk/uk/ac/soton/itinnovation/grid/service/types"
    xmlns:grid-res="http://www.it-innovation.soton.ac.uk/2004/grid/resalloc"
    xmlns:grid-job="http://www.it-innovation.soton.ac.uk/2004/grid/job"
    xmlns:grid-data="http://www.it-innovation.soton.ac.uk/2004/grid/data"
    xmlns:grid="http://www.it-innovation.soton.ac.uk/2004/grid"
    xmlns:grid-types="http://www.it-innovation.soton.ac.uk/uk/ac/soton/itinnovation/grid/types"
    xmlns:service-types="http://www.it-innovation.soton.ac.uk/uk/ac/soton/itinnovation/grid/service/types"
    xmlns:wsa="http://www.w3.org/2005/08/addressing"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
    xmlns:nextgrid="http://nextgrid.org/2007/security"
    xmlns:ogsa="http://types.ogsadai.org.uk">

 <globalConfiguration>
 <parameter name="attachment_encapsulation_format" value="axis.attachment.style.dime"/>
 <parameter name="enableNamespacePrefixOptimization" value="false" />
 <parameter name="disablePrettyXML" value="true"/>
 <parameter name="enableSignatureConfirmation" value="false"/>   <!-- Needed for .NET compat -->

 <requestFlow>
  <handler type="java:uk.ac.soton.itinnovation.grid.client.ogsadai.OgsaDaiRequestHandler" />
  <handler type="java:uk.ac.soton.itinnovation.grid.client.ogsadai.OgsaDaiSAMLHandler" />
  <handler type="java:uk.ac.soton.itinnovation.grid.utils.wss4j.handler.WSOutboundHandler" >
   <parameter name="action" value="Timestamp Signature"/>
   <parameter name="signaturePropFile" value="crypto.properties" />
   <parameter name="signatureKeyIdentifier" value="DirectReference" />
   <parameter name="signatureParts" value="{}{http://schemas.xmlsoap.org/soap/envelope/}Body;{}{http://it-innovation.soton.ac.uk/2005/grid}ConversationID;{}{http://it-innovation.soton.ac.uk/2005/grid}OwnerRule;{}{http://it-innovation.soton.ac.uk/2005/grid}BillingInformation;{}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp"/>
   <parameter name="passwordCallbackClass" 
     value="uk.ac.soton.itinnovation.grid.utils.PWCallback"/>
  </handler>
 </requestFlow>
 <responseFlow>
  <handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
   <parameter name="action" value="Signature"/>
   <parameter name="signaturePropFile" value="crypto.properties" />
   <parameter name="passwordCallbackClass" 
     value="uk.ac.soton.itinnovation.grid.utils.PWCallback"/>
  </handler>
 </responseFlow>

 </globalConfiguration>

 <typeMapping qname="grid-types:X509Certificate"
    languageSpecificType="java:java.security.cert.X509Certificate"
    serializer="uk.ac.soton.itinnovation.grid.types.CertificateSerializerFactory"
    deserializer="uk.ac.soton.itinnovation.grid.types.CertificateDeserializerFactory"
    encodingStyle=""/>

 <typeMapping qname="grid-types:GregorianCalendar"
    languageSpecificType="java:java.util.GregorianCalendar"
    serializer="org.apache.axis.encoding.ser.CalendarSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.CalendarDeserializerFactory"    
    encodingStyle=""/>
 <typeMapping qname="xsd:anyURI"
    languageSpecificType="java:java.net.URL"
    serializer="org.apache.axis.encoding.ser.SimpleSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.SimpleDeserializerFactory"    
    encodingStyle=""/>

 <typeMapping qname="wsa:EndpointReferenceType"
    languageSpecificType="java:org.apache.axis.message.addressing.EndpointReferenceType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>

 <typeMapping qname="wsa:ReferenceParametersType"
    languageSpecificType="java:org.apache.axis.message.addressing.ReferenceParametersType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>

 <typeMapping qname="grid-types:SubjectDescription"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.SubjectDescription"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>
    
<typeMapping qname="grid-types:AdditionalSecurityToken"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.AdditionalSecurityToken"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>
    
<typeMapping qname="grid-types:SubjectDescription"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.SubjectDescription"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>
    
 <typeMapping qname="service-types:SLATemplate"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.SLATemplate"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
 <typeMapping qname="service-types:SLAProposal"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.SLAProposal"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
 <typeMapping qname="service-types:Constraint"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.Constraint"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
 <typeMapping qname="service-types:Bound"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.Bound"
    serializer="org.apache.axis.encoding.ser.EnumSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.EnumDeserializerFactory"    
    encodingStyle=""/>

 <typeMapping qname="service-types:TimePeriod"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.TimePeriod"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
    
 <typeMapping qname="service-types:PermittedService"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.PermittedService"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>

 <typeMapping qname="service-types:Metric"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.Metric"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
    
 <typeMapping qname="service-types:PricingTerm"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.PricingTerm"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"    
    encodingStyle=""/>
 
 <typeMapping qname="grid:IDType"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.IDType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

 <typeMapping qname="grid-acct:AccountStatement"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.AccountStatement"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

 <typeMapping qname="grid-acct:StatementEvent"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.StatementEvent"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

 <typeMapping qname="service-types:addressType"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.service.types.AddressType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

  <typeMapping qname="grid-types:MatchRule"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.MatchRule"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

  <typeMapping qname="nextgrid:MatchPattern"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.MatchPattern"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

  <typeMapping qname="nextgrid:PolicyRule"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.PolicyRule"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

    <typeMapping qname="nextgrid:PolicyRuleType"
    languageSpecificType="java:uk.ac.soton.itinnovation.grid.types.PolicyRuleType"
    serializer="org.apache.axis.encoding.ser.EnumSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.EnumDeserializerFactory"    
    encodingStyle=""/>
  
  <!-- This prevents "Could not convert org.apache.axis.types.URI" errors when sending EndpointReferenceTypes as arguments -->
  <typeMapping qname="wsa:AttributedURI"
    languageSpecificType="java:org.apache.axis.message.addressing.AttributedURI"
    serializer="org.apache.axis.encoding.ser.SimpleSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.SimpleDeserializerFactory"
    encodingStyle=""/>

  <typeMapping qname="ogsa:ExtensibilityType"
    languageSpecificType="java:uk.org.ogsadai.types.ExtensibilityType"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle=""/>

 <transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender"/>

</deployment>