2016-03-04 7 views
8

migrieren ich von opensaml 2.6 eine Klasse migrieren müssen OpenSAML 3.1.1 Kompilieren Iwie von opensaml 2,6 bis 3.1.1

1)

Element plaintextElement = getElementAssertion(inputBean); 
String xml = XMLHelper.prettyPrintXML(plaintextElement); 

ich einige Fehler erhalten cant't finde die Klasse XMLHelper in der neuen Version.

2)

DefaultBootstrap.bootstrap(); 
builderFactory = Configuration.getBuilderFactory(); 
Configuration.getMarshallerFactory().getMarshaller(assertion).marshall(assertion); 

I can'f Klasse DefaultBootstrap finden und ich kann nicht eine Klasse Konfiguration mit Methoden getBuilderFactory(), getMarshallerFactory()

3)

BasicCredential credential = new BasicCredential(); 
finden

Nun ist der Konstruktor new BasicCredential() nicht sichtbar.

Ich habe keine Dokumentation mit Angabe der Verfallzeit gefunden. Was muss ich tun, um diese Klasse in die Version 3.1.1 von opensaml zu portieren?

Kann mir jemand helfen? Vielen Dank im Voraus. Sorry für mein schlechtes Englisch.

Antwort

14

Ich bin mir nicht sicher, ob Sie bereits auf opensaml 3 upgraden konnten, aber da ich während des Upgrades auf dieses Upgrade gestoßen bin, dachte ich, ich werde dokumentieren, was ich gefunden habe.

Es gibt sehr wenig Dokumentation als offensichtlich ist es nicht eine Priorität für sie im Moment (auch hier erwähnt: OpenSaml3 Documentation), die am nützlichsten (auch wenn bei weitem nicht vollständig) Seite I ist dies eine gefunden: https://wiki.shibboleth.net/confluence/display/OS30/Initialization+and+Configuration

1) Es gibt eine Klasse SerializeSupport mit einem Verfahren prettyPrintXML in lib net.shibboleth.utilities:java-support

2) Initialisierung jetzt über InitializationService zB erfolgt

InitializationService.initialize(); 

Sie können die Erbauer/Einweiser über XMLObjectProviderRegistrySupport z abrufen .:

XMLObjectProviderRegistrySupport.getMarshallerFactory() 
XMLObjectProviderRegistrySupport.getBuilderFactory() 
XMLObjectProviderRegistrySupport.getUnmarshallerFactory() 

Geist, der die Java Service Provider API verwendet OpenSAML. In meinem Fall (mit OSGi-Bundle org.apache.servicemix.bundles:org.apache.servicemix.bundles.opensaml) für eine SAML-Assertion Parsen fügte ich die SPI Config META-INF/services/org.opensaml.core.config.Initializer folgende Einträge:

org.opensaml.core.xml.config.XMLObjectProviderInitializer 
org.opensaml.core.xml.config.GlobalParserPoolInitializer 
org.opensaml.saml.config.XMLObjectProviderInitializer 
org.opensaml.saml.config.SAMLConfigurationInitializer 
org.opensaml.xmlsec.config.XMLObjectProviderInitializer 

EDIT: Die oben in einem Test gearbeitet, aber in den OSGi-Containern nicht ausgeführt werden . Abhilfe für OSGi: OpenSAML3 resource not found 'default-config.xml' in OSGi container

Wenn Sie die Standard-Bibliotheken verwenden (org.opensaml:opensaml-core, org.opensaml:opensaml-saml-api, org.opensaml:opensaml-saml-impl, ...) Sie dürfen keine SPI Config hinzufügen müssen, wie die Gläser bereits SPI configs mit einer Standardkonfiguration für die Initialisierung enthalten.

3) Es gibt eine Klasse BasicCredential in lib org.opensaml:opensaml-security-api. Ich sehe keine Alternative zur Bereitstellung eines Schlüssels während der Initialisierung.

+0

Also, was könnte der Grund sein, wenn ich null immer noch statt dem (un) Einweiser aus der Fabrik? 'XMLObjectProviderRegistrySupport.getMarshallerFactory(). GetMarshaller (authnRequest.getElementQName())' – Gobliins

+0

Haben Sie 'InitializationService.initialize();'? –

+0

Unter https://git.shibboleth.net/view/?p=java-opensaml.git;a=blob;f=opensaml-saml-impl/src/test/java/org/opensaml/ gibt es einige hilfreiche Beispielcodes. saml/saml2/Metadaten/MetadataTest.java; hb = HEAD. Beachten Sie, dass ein Teil der Initialisierung in der Oberklasse bei 'org.opensaml.core.xml.XMLObjectBaseTestCase # initXMLObjectSupport' liegt, die wiederum von 'OpenSAMLInitBaseTestCase' (führt nur 'InitializationService.initialize()') aus. –

0

Ich lerne, wie man das OS3 für die Entwicklung verwendet. Dies ist ein Beispiel, um eine Base64-SAML-Anfrage in SAMLObject in der V3-Version zu konvertieren. Hoffe es kann dir helfen.

Das Projekt sieht the github repository

public class SAMLToolkit { 

    public static SAMLObject convertBase64ToSaml(String base64Str) { 
     byte[] decodedBytes = new byte[0]; 
     try { 
      decodedBytes = Base64.decode(base64Str); 
     } catch (Base64DecodingException e) { 
      e.printStackTrace(); 
      return null; 
     } 

     InputStream is = new ByteArrayInputStream(decodedBytes); 
     //is = new InflaterInputStream(is, new Inflater(true)); 
     try { 

      InitializationService.initialize(); 
      Document messageDoc; 
      BasicParserPool basicParserPool = new BasicParserPool(); 
      basicParserPool.initialize(); 
      messageDoc = basicParserPool.parse(is); 
      Element messageElem = messageDoc.getDocumentElement(); 
      Unmarshaller unmarshaller = XMLObjectProviderRegistrySupport.getUnmarshallerFactory().getUnmarshaller(messageElem); 

      assert unmarshaller != null; 
      return(SAMLObject) unmarshaller.unmarshall(messageElem); 
     } catch (InitializationException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (XMLParserException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (UnmarshallingException e) { 
      e.printStackTrace(); 
      return null; 
     } catch (ComponentInitializationException e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 
} 
+0

Dies würde für mich nicht funktionieren, wenn ich auch '/ META-INF/services/org.opensaml.core.config.Initializer' hinzufügen, die die von @Clauds angezeigte Konfiguration enthält. –

Verwandte Themen