View Javadoc

1   /* 
2    * Copyright (c) 2007, Fraunhofer-Gesellschaft
3    * All rights reserved.
4    * 
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions are
7    * met:
8    * 
9    * (1) Redistributions of source code must retain the above copyright
10   *     notice, this list of conditions and the disclaimer at the end.
11   *     Redistributions in binary form must reproduce the above copyright
12   *     notice, this list of conditions and the following disclaimer in
13   *     the documentation and/or other materials provided with the
14   *     distribution.
15   * 
16   * (2) Neither the name of Fraunhofer nor the names of its
17   *     contributors may be used to endorse or promote products derived
18   *     from this software without specific prior written permission.
19   * 
20   * DISCLAIMER
21   * 
22   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33   *  
34   */
35  package org.ogf.graap.wsag.client.remote;
36  
37  import org.apache.log4j.Logger;
38  import org.apache.muse.util.xml.XmlUtils;
39  import org.apache.muse.ws.addressing.soap.SoapFault;
40  import org.apache.muse.ws.resource.sg.WssgConstants;
41  import org.apache.xmlbeans.XmlException;
42  import org.apache.xmlbeans.XmlOptions;
43  import org.ogf.graap.wsag.api.WsagConstants;
44  import org.ogf.graap.wsag.api.client.AgreementFactoryClient;
45  import org.ogf.graap.wsag.api.client.AgreementFactoryRegistryClient;
46  import org.ogf.graap.wsag.api.exceptions.ResourceUnavailableException;
47  import org.ogf.graap.wsag.api.exceptions.ResourceUnknownException;
48  import org.ogf.graap.wsag.api.security.ISecurityProperties;
49  import org.w3.x2005.x08.addressing.EndpointReferenceType;
50  import org.w3c.dom.Element;
51  
52  /**
53   * Default implementation of an agreement factory client.
54   * 
55   * @author Oliver Waeldrich
56   * 
57   */
58  public class RemoteAgreementFactoryRegistryServiceImpl extends WsrfResourceClient
59      implements AgreementFactoryRegistryClient
60  {
61  
62      private static Logger log = Logger.getLogger( RemoteAgreementFactoryRegistryServiceImpl.class );
63  
64      private static EndpointReferenceType createRegistryEPR( EndpointReferenceType epr )
65      {
66          String address = epr.getAddress().getStringValue();
67  
68          //
69          // BUG 79: if the address ends with "/", we need to remove it
70          //
71          while ( address.endsWith( "/" ) )
72          {
73              address = address.substring( 0, address.length() - 1 );
74          }
75  
76          epr.getAddress().setStringValue( address + WsagConstants.AGREEMENT_FACTORY_REGISTRY_SERVICE_URI );
77          return epr;
78      }
79  
80      /**
81       * Instantiates a new agreement factory client for the given endpoint reference.
82       * 
83       * @param epr
84       *            the agreement factory EPR
85       * 
86       * @param securityProperties
87       *            the security properties
88       */
89      public RemoteAgreementFactoryRegistryServiceImpl( EndpointReferenceType epr,
90                                                        ISecurityProperties securityProperties )
91      {
92          super( createRegistryEPR( epr ), securityProperties );
93      }
94  
95      /**
96       * {@inheritDoc}
97       */
98      public AgreementFactoryClient[] listAgreementFactories()
99          throws ResourceUnknownException, ResourceUnavailableException
100     {
101         try
102         {
103             Element[] entries = getResourceProperty( WssgConstants.ENTRY_QNAME );
104             AgreementFactoryClient[] agreements = new AgreementFactoryClient[entries.length];
105 
106             for ( int n = 0; n < entries.length; ++n )
107             {
108                 //
109                 // convert ws-sg entry XML -> EPRs -> clients
110                 //
111                 Element eprXML = XmlUtils.getElement( entries[n], WssgConstants.MEMBER_SERVICE_EPR_QNAME );
112 
113                 EndpointReferenceType dest =
114                     EndpointReferenceType.Factory.parse( eprXML,
115                                                          new XmlOptions().setLoadReplaceDocumentElement( null ) );
116 
117                 //
118                 // create a new agreement instance with the current properties
119                 //
120                 agreements[n] = new RemoteAgreementFactoryClientImpl( dest, getSecurityProperties().clone() );
121                 agreements[n].setTrace( isUsingTrace() );
122             }
123 
124             return agreements;
125         }
126         catch ( SoapFault e )
127         {
128             log.error( e.getMessage() );
129             throw new ResourceUnavailableException( e );
130         }
131         catch ( XmlException e )
132         {
133             throw new ResourceUnavailableException( e );
134         }
135         catch ( Exception e )
136         {
137             throw new ResourceUnavailableException( e );
138         }
139     }
140 
141 }