2016-03-04 27 views
8

muszę migrować klasę z opensaml 2,6 do opensaml 3.1.1 Kompilacja mogę otrzymać jakieś błędysposób migracji z 2.6 do 3.1.1 opensaml

1)

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

I cant't znajdź klasę XMLHelper w nowej wersji.

2)

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

can'f znaleźć klasy DefaultBootstrap i nie może znaleźć konfiguracji klasy z metodami getBuilderFactory getMarshallerFactory()()

3)

BasicCredential credential = new BasicCredential(); 

Teraz contructor new BasicCredential() nie jest widoczny.

Nie znalazłem dokumentacji ze wskazaniem na wycofanie. Co należy zrobić, aby przenieść tę klasę do wersji 3.1.1 Openaml?

Czy ktoś może mi pomóc? Z góry dziękujemy. Przepraszamy za mój zły angielski.

Odpowiedz

14

Nie jestem pewien, czy udało Ci się uaktualnić do opensaml 3, ale ponieważ natknąłem się na to podczas próby aktualizacji sam, pomyślałem, że zamierzam udokumentować to, co znalazłem.

Jest bardzo mało dokumentacji jak najwyraźniej to nie jest dla nich priorytetem w tej chwili (wspomniane również tutaj: OpenSaml3 Documentation), najbardziej przydatny (nawet jeśli zdecydowanie nie zakończyć) Strona znalazłem jest to jedno: https://wiki.shibboleth.net/confluence/display/OS30/Initialization+and+Configuration

1) sposób klasy SerializeSupport ze sposobem prettyPrintXML lib net.shibboleth.utilities:java-support

2) Inicjowanie odbywa się teraz przez InitializationService np

InitializationService.initialize(); 

Można pobierać Konstruktor/marshallers poprzez XMLObjectProviderRegistrySupport np .:

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

pamiętać, że opensaml używa Provider API Java serwisowym. W moim przypadku (przy użyciu OSGi wiązki org.apache.servicemix.bundles:org.apache.servicemix.bundles.opensaml) do analizowania twierdzenia SAML dodałem config SPI META-INF/services/org.opensaml.core.config.Initializer zawierający następujące dane:

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: Powyższy pracował w teście, ale nie działają w kontenerze OSGi . Obejście dla OSGi: OpenSAML3 resource not found 'default-config.xml' in OSGi container

Jeśli użyć standardowych bibliotek (org.opensaml:opensaml-core, org.opensaml:opensaml-saml-api, org.opensaml:opensaml-saml-impl, ...) może nie trzeba dodawać żadnych config SPI jak słoiki zawierają już configs SPI o standardowej konfiguracji dla inicjalizacji.

3) Istnieje klasa BasicCredential w bibliotece org.opensaml:opensaml-security-api. Nie widzę alternatywy dla dostarczania klucza podczas inicjalizacji.

+0

Więc co może być powodem kiedy wciąż zerowy zamiast (ONZ), naziemnego z fabryki? 'XMLObjectProviderRegistrySupport.getMarshallerFactory(). GetMarshaller (authnRequest.getElementQName())' – Gobliins

+0

Czy masz 'InitializationService.initialize();'? –

+0

Jest kilka przydatnych przykładowy kod na https://git.shibboleth.net/view/?p=java-opensaml.git;a=blob;f=opensaml-saml-impl/src/test/java/org/opensaml/ saml/saml2/metadata/MetadataTest.java; hb = HEAD. Zauważ, że część inicjalizacji znajduje się w superklasie w 'org.opensaml.core.xml.XMLObjectBaseTestCase # initXMLObjectSupport', która z kolei dziedziczy po' OpenSAMLInitBaseTestCase' (nie robi niczego poza 'InitializationService.initialize()'). –

0

Uczę się, jak używać OS3 do programowania. Jest to jeden z przykładów konwersji żądania podstawowego 64-bitowego do SAMLObject w wersji V3. Mam nadzieję, że może ci to pomóc.

Projekt zobaczyć 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

To nie będzie działać dla mnie, chyba że dodaję również "/ META-INF/services/org.opensaml.core.config.Initializer', który zawiera konfigurację pokazaną przez @Clauds. –