Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

), der repræsenterer kernekoncepterne i SOSI-skemaet, f.eks. en meddelelse eller et ID-kort.
Når udviklerne har konstrueret disse modelobjekter, er det muligt at seri "serialisere" dem til XML og vice versa. De-serialisering (fra XML til modelobjekter) udføres også gennem factory-klassen.  Nedenfor vises et meget simpelt flow, hvor en serviceforbruger (f.eks. et medicinsystem) opretter en anmodning, indsætter data i anmodningen, serialiserer den til XML og sender den til en serviceforbruger.

...

Biblioteker

Standard SOSI-factory

Gliffy Diagram
namea_simple_service_consumer_usage
pagePin1

IDWSH-factory

Fra version 2.1 inkluderer Seal.Java nu IDWSHFactory. Version 2.1 markerer begyndelsen af IDWSH-support. Det formodes at fremdidige versioner af Seal.Java vil udvide support og arbejdsgang ved hjælp af IDWSH.
Seal.Java 2.1 understøtter kun IDWSH  IdentityToken. Strømmen til konstruktion og anvendelse af IdentityToken er vist nedenstående figur.

IDWSH Identity  token workflowImage Added

OIOIDWS-factory

Eksempel på brug af IDWS hjælpe klasser for service udbydere.

Code Block
languagejava
collapsetrue
/* Server will setup OIOIDWSFactory */
		final Federation federation = new SOSITestFederation(SignatureUtil.setupCryptoProviderForJVM());
		final CredentialVault serverTestVault = CredentialVaultTestUtil.getCredentialVaultFromResource(System.getProperties(), "fmk_idws_test.p12");

final OIOIDWSFactory oioidwsFactory = new OIOIDWSFactory(federation, spVaultserverTestVault);
		
		
		// ****************** HANDLING INPUT ******************
		// Server side input/request document
		SOAPPart soapPart = soapRequestMessage.getSOAPPart();
		SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
		SOAPBody soapBody = soapRequestMessage.getSOAPBody();
		SOAPHeader soapHeader = soapRequestMessage.getSOAPHeader();
		
		/*Parse request document into IDWS request*/
		/*Validation is done in parsing. So if any error - no request object is created*/
		LibertyRequest request = oioidwsFactory.createRequest(soapEnvelope);
		
		/*Work on request*/
		String messageID = request.getMessageID();
		assertNotNull(messageID); // Client did not set MessageID - but in cannot be null
		String to = request.getTo();
		assertEquals("https://myApp", to);
		
		/*Work with CitizenIdentityToken*/
		CitizenIdentityToken identityToken = request.getIdentityToken();
		assertNotNull(identityToken); // Must be there!
		String cpr = identityToken.getCpr();
		assertEquals("2512484916", cpr);
		BasicPrivileges privilegesbasicPriviliges = identityToken.getPrivileges();
		assertNotNull(privilegesbasicPriviliges);
		/*Work with priviliges*/
		Set<String> scopes = basicPriviliges.getScopes();
for (String scope : scopes) {
List<String> privileges = basicPriviliges.getPrivileges(scope);

assertEquals("urn:dk:healthcare:saml:actThroughProcurationBy:cprNumberIdentifier:1111111118", scope);

assertEquals("urn:dk:healthcare:fmk:read", privileges.get(0));
assertEquals("urn:dk:healthcare:fmk:write", privileges.get(1)); 
}

List<String> privilegeList = privilegesbasicPriviliges.getPrivileges("urn:dk:healthcare:saml:actThroughProcurationBy:cprNumberIdentifier:1111111118");
		assertNotNull(privilegeList);
		assertEquals(2, privilegeList.size());
		
		/*Work in my app*/
		Tag myAppTag = TagUtil.create("http://demo.dk/custom", "myApp","App");
		Element myApp = TagUtil.getFirstChildElementNS(soapBody, myAppTag);
		String myAppRequestAsString = XmlUtil.node2String(myApp, false, false);
		assertEquals("<myApp:App xmlns:myApp=\"http://demo.dk/custom\"><myApp:Field_1>value1</myApp:Field_1><myApp:Field_2 custom_attribute_2=\"value2\"/></myApp:App>", myAppRequestAsString);
		
		Tag myAppHeaderTag = TagUtil.create("http://demo.dk/custom", "myApp","Header");
		Element myHeader = TagUtil.getFirstChildElementNS(soapHeader, myAppHeaderTag);
		String myAppRequestHeaderAsString = XmlUtil.node2String(myHeader, false, false);
		assertEquals("<myApp:Header xmlns:myApp=\"http://demo.dk/custom\">my_app_header</myApp:Header>", myAppRequestHeaderAsString);
		
		// ****************** CREATING OUTPUT ******************
		Document outputDocument = XmlUtil.readXml(System.getProperties(), MY_SOAP_APP_REPONSE, false);
		
		/*Sign repsonse with test vault*/
		final CredentialVault serverTestVault = CredentialVaultTestUtil.getCredentialVaultFromResource(System.getProperties(), "fmk_idws_test.p12");
		LibertyMessageDOMEnhancer enhancer = oioidwsFactory.createResponseDomEnhancer(serverTestVault, outputDocument, true);
		enhancer.setWSAddressingAction("myApp.response"); //Required
		//enhancer.setWSAddressingMessageID(); //Required - one will be made if not set be server
		enhancer.setWSAddressingRelatesTo(request.getTo()); //Required - Validation will fail if not set
		//enhancer.setWSAddressingTo("client"); //Optional
		
		enhancer.enhanceAndSign(); // Enhance and sign output document into IDWS valid reponse
		
		/*create response message*/
		MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
		soapResponseMessage = messageFactory.createMessage(null, new ByteArrayInputStream(XmlUtil.node2String(outputDocument).getBytes()));
		//return responseSoapMessage
		//System.out.println(XmlUtil.node2String(responseSoapMessage.getSOAPPart().getEnvelope(), true, false));








Footnotes Display
resettrue