Bas - Utvecklingsstöd



Relevanta dokument
Policy för öppen källkod RIV Tekniska Anvisningar

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Att skriva till och läsa från terminalfönstret

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 8: Exempel och problemlösning

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Malmö högskola 2008/2009 CTS

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsnings 9 - Exceptions, I/O

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Föreläsning 3. Stack

Objektorienterad programmering i Java

OOP Objekt-orienterad programmering

Tentamen OOP

OOP Omtenta

Lösningar för tenta 2 DAT043,

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Laboration 1 - Grunderna för OOP i Java

DAT043 Objektorienterad Programmering

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

F4. programmeringsteknik och Matlab

Att använda Java SE JDK 6

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 12: Exempel och problemlösning

Lösningsförslag till tentamen

Tentamen Nätverksprogrammering Lösningsförslag

Generisk klass med typparameter Inre klass - ListIterator

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Chapter 4: Writing Classes/ Att skriva egna klasser.

JAVA Mer om klasser och objektorientering

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

Dugga i Grundläggande programmering STS, åk

OOP Tentamen

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

RIV Tekniska Anvisningar Release notes

Del A (obligatorisk för alla)

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Kopiering av objekt i Java

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 2. Länkad lista och iterator

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Tentamen. Lösningsförslag

Grundläggande programmering med C# 7,5 högskolepoäng

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Malmö högskola 2007/2008 Teknik och samhälle

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Föreläsning 3-4 Innehåll

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen FYTA11 Javaprogrammering

OOP Tentamen

Laboration A Objektsamlingar

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Föreläsning 3: Booleans, if, switch

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

DB, DATA, LOGIC, EXPOSURE (WEB)

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Webbtjänster med API er

Internationalisering/lokalisering på webben

Transkript:

Bas - Utvecklingsstöd skapad för: SVR skapad av: Robert Georén Version: 1.2 Datum: 2010-05-19 Förändringar Vem När Vad Robert Georén 2009-05-11 Skapade dokumentet, version 1.0. Robert Georén 2009-09-15 Ändrade i göra tjänsteval anropet, version 1.1. Robert Georén 2009-12-28 Uppdaterat efter att ha tagit bort EN13606. Version 1.2 Daniel Berggren 2010-01-26 Lagt till exempelkod för getpersonqueuestatus Daniel Berggren 2010-02-10 - Ändrat kod för Göra tjänsteval samt Hämta köinformation för en person - Ändrat Generera proxy för tjänsten Daniel Berggren 2010-02-18 Ändrat meddelande för hämta tjänsteval adderat namn för facility och resource adress telefon e-post organisationsnr Mawell +46 (0)8 527 400 00 contact@mawell.com 556582-5634 Solna Torg 3, 3 tr fax hemsida 171 45 Solna +46 (0)8 527 400 40 www.mawell.com

Innehåll 1. Inledning... 3 2. Arkitektur/Design... 3 2.1 Nationella anvisningar... 3 3. Utvecklingsstöd för Anslutningspunkter - Java... 4 4. Utvecklingsstöd för Konsumenter - Java... 4 4.1 Generera proxy för tjänsten... 4 4.2 Hämta tjänsteval JAXWS-RI... 4 4.3 Hämta tillgängliga tjänsteutövare JAXWS-RI... 7 4.4 Hämta tillgängliga tjänsteutövare Axis 1.4.1... 8 4.5 Göra tjänsteval JAXWS-RI... 10 4.6 Hämta listningstyper JAXWS-RI... 12 4.7 Hämta köinformation för en person JAXWS-RI... 13 5. Testning... 15 6. Referenser... 15 Sidan 2 av 16

1. Inledning Syftet med dokumentet är att underlätta för systemutvecklare som ska utveckla en Anslutningspunkt eller Konsument för den nationella listningstjänsten. 2. Arkitektur/Design Domänmodell för Nationel listningstjänst. Domänmodell för Nationell Listningstjänst. 2.1 Nationella anvisningar Det finns nationella anvisningar för hur nationella tjänster bör implementeras och en av dem är RIV (se ref[1]). RIVs syfte är bl.a. att beskriva hur man realiserar utbyte av information mellan två parter. Följande avsnitt beskriver vad en Producent kan behöva veta för att realisera en anslutningspunkt. 2.1.1 WSDL och RIV Det finns många regler för hur WSDL filerna ska utformas i enlighet med RIV Basic Profile 2.0. För att få en förståelse varför WSDL filerna ser ut som de gör, se referens [1]. Här följer en kortfattad summering av reglerna. 1. Regel: SOAP 1.1 ska användas. 2. Regel: SOAP meddelanden skall använda document/literal style. 3. Anpassning utökningsbarhet: <xsd:any> användas för att uppnå utökningsbarhet. 2.1.2 Contract-first Development WSDL filen utgör kontraktet mellan Konsument och Producent och RIV ger riktlinjen att använda det designmönstret. Detta designmönster anses även som best-practice eftersom det skyddar Sidan 3 av 16

Konsumenter ifrån kodförändringar i tjänsteimplementationen och skillnader som finns mellan verktygen som genererar WSDL filer ifrån kod. 2.1.3 Riktlinjer ifrån VIT Boken Nationella Listningstjänsten definieras som en fråga-svar tjänsteinteraktion enligt VIT-boken. Ett icke-funktionellt krav på producenter är att loggning av anropen till tjänsten ska göras, detta främst för att kunna mäta svarstider på tjänsten. 3. Utvecklingsstöd för Anslutningspunkter - Java Här följer några tips vid utveckling av en Anslutningspunkt. Generera server artifakter med ett verktyg så att de blir JSR 181 konformt (se ref[12]). wsgen ingår i JDK 1.6 men andra alternativ är t.ex. Apache CFX (ref [7]) eller Metro (ref [8]). I dagsläget (2010) så har CXF bäst verktyg för att generera proxy/bidningsklasser, vilket då rekommenderas. Använd anvisningar i Meddelandestruktur (ref [5]) för att ta reda på vad som skall returneras till Konsumenter. 4. Utvecklingsstöd för Konsumenter - Java 4.1 Generera proxy för tjänsten Det rekommenderade sättet att använda en webservice av denna karaktär är att generera proxys för tjänsten och paketera proxy na i en.jar fil. Använd ditt favorit verktyg för proxy generering (se ref [7] och [8]). För att virtualiseringstjänsten ska veta vem som ska utföra en fråga så måste HSAID anges vid varje tjänsteinteraktion. AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("01"); package com.mawell.nlt.consumer; import java.net.malformedurlexception; import java.net.url; import javax.xml.namespace.qname; import javax.xml.ws.service; 4.2 Hämta tjänsteval JAXWS-RI Nedan följer Java kod för användningsfallet Hämta tjänsteval.för att se XML datat som finns i SOAP Body, se ref [9]. import org.w3._2005._08.addressing.attributeduritype; import riv.crm.carelisting._1.facility; import riv.crm.carelisting._1.resource; import riv.crm.carelisting._1.subjectofcare; import riv.crm.carelisting.getlisting._1.rivtabp20.getlistingresponderinterface; import riv.crm.carelisting.getlisting._1.rivtabp20.personnotfound; Sidan 4 av 16

import riv.crm.carelisting.getlisting._1.rivtabp20.technicalexception; import riv.crm.carelisting.getlistingresponder._1.getlistingrequesttype; import riv.crm.carelisting.getlistingresponder._1.getlistingresponsetype; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Hämta tjänsteval". @author Robert Siwerz, www.mawell.com. / public class UseCaseHamtaTjansteval private void usecasehamtavardval() throws MalformedURLException // Hämtar referens till SEI (Service Endpoint Interface). QName servicename = new QName("urn:riv:crm:carelisting:GetListing:1:rivtabp20", "GetListingResponderService"); Service service = Service.create(new URL("http://127.0.0.1:8088/mockGetListingResponderBinding?WSDL"), servicename); GetListingResponderInterface listingsei = service.getport(getlistingresponderinterface.class); // Hämtar listningsinformation för angiven person. AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("01"); // Områdeskod GetListingRequestType request = new GetListingRequestType(); request.setpersonid("195005055005"); GetListingResponseType response = null; response = listingsei.getlisting(logicaladdress, request); catch (PersonNotFound e) // Använd affärsregel för att hantera detta. catch (TechnicalException e) // Gör ett nytt försök... // Skriver ut debug information SubjectOfCare patientdata = response.getsubjectofcare(); // 1. Personnummer System.out.println("1. Sökandes personnummer: " + patientdata.getpersonid()); // 2. Tjänsteutövarens (t.ex. Vårdenhet) HSAID String hsaid = patientdata.getlisting().get(0).gethealthcarefacility().getfacilityid(); System.out.println("2. Tjänsteutövaren (HSAID): " + hsaid); // 3. Hämtar mer detaljer om tjänsteutövaren. Facility facility = patientdata.getlisting().get(0).gethealthcarefacility(); Resource resource = patientdata.getlisting().get(0).getresource(); if(facility!= null) // tjänsteutövaren är en vårdenhet och innehåller följande data. Sidan 5 av 16

System.out.println(" Vårdenhet:"); // 1. Namn. System.out.println(" 1. Namn: " + facility.getfacilityname()); // 2. Har vårdenheten kö just nu. String queue = (facility.ishasqueue())? "Ja" : "Nej"; System.out.println(" 2. Är det kö just nu: " + queue); if (resource!= null) // Tjänsteutövaren är en specifik läkare och innehåller följande System.out.println(" Vårdgivare:"); // Hämtar ut data // 1. Person id. System.out.println(" 1. Person id: " + resource.getresourceid()); // 1. Namn. System.out.println(" 2. Namn: " + resource.getresourcename()); / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCaseHamtaTjansteval exempelkod = new UseCaseHamtaTjansteval(); exempelkod.usecasehamtavardval(); catch (Exception e) e.printstacktrace(); Hämtar tjänsteval/vårdval för angiven person. Följande är en exempelutskrift när ovan program körs när personen är listad på en vårdenhet 1. Sökandes personnummer: 121212-1212 2. Tjänsteutövaren (HSAID): SE90KC2-232A Vårdenhet: 1. Namn: Björkhagens BVC 2. Är det kö just nu: Ja Utskrift ifrån Java Console när programmet exekveras Följande är en exempelutskrift när ovan program körs när personen är listad på en läkare 1. Sökandes personnummer: 121212-1212 2. Tjänsteutövaren (HSAID): SE90KC2-232A Vårdenhet: 1. Namn: Björkhagens BVC 2. Är det kö just nu: Nej Vårdgivare: 1. Person id: SE90KC2-2KU27 2. Namn: Erik Tryggelin Utskrift ifrån Java Console när programmet exekveras Sidan 6 av 16

package com.mawell.nlt.consumer; import java.net.malformedurlexception; import java.net.url; import java.util.iterator; import java.util.list; import javax.xml.namespace.qname; import javax.xml.ws.service; 4.3 Hämta tillgängliga tjänsteutövare JAXWS-RI För att se XML datat som finns i SOAP Body, se ref [11]. import org.w3._2005._08.addressing.attributeduritype; import riv.crm.carelisting._1.facility; import riv.crm.carelisting.getavailablefacilities._1.rivtabp20.getavailablefacilitiesresponderinterface; import riv.crm.carelisting.getavailablefacilities._1.rivtabp20.technicalexception; import riv.crm.carelisting.getavailablefacilitiesresponder._1.getavailablefacilitiesrequesttype; import riv.crm.carelisting.getavailablefacilitiesresponder._1.getavailablefacilitiesresponsetype; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Hämta tillgänglia tjänsteutövare". Tjänsteutövare kan vara en vårdenhet. @author Robert Siwerz, www.mawell.com. / public class UseCaseHamtaTillgangligaTjansteutovare / Exempelkod för Use Case "Hämtar tillgängliga tjänsteutövare". @author Robert Siwerz,www.mawell.com. @throws Fel vid kommunikation med tjänsten. / public void usecasehamtatillgangligavardenheter() throws MalformedURLException // Hämtar referens till SEI (Service Endpoint Interface). QName servicename = new QName("urn:riv:crm:carelisting:GetAvailableFacilities:1:rivtabp20", "GetAvailableFacilitiesResponderService"); Service service = Service.create(new URL("http://127.0.0.1:8088/mockGetAvailableFacilitiesResponderBinding?WSDL"), servicename); GetAvailableFacilitiesResponderInterface listingsei = service.getport(getavailablefacilitiesresponderinterface.class); frågan. // Hämta tillgängliga tjänsteutövare. AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("se239482390-23sad"); // HSAID till huvudmannen som skall svara på GetAvailableFacilitiesRequestType request = new GetAvailableFacilitiesRequestType(); GetAvailableFacilitiesResponseType response = null; Sidan 7 av 16

response = listingsei.getavailablefacilities(logicaladdress, request); catch (TechnicalException e) // Gör ett nytt försök... // Skriver att tillgängliga tjänsteutövare. List<Facility> facilities = response.gethealthcarefacilities(); System.out.println("Tillgängliga vårdenheter:"); Iterator<Facility> hsaiterator = facilities.iterator(); while (hsaiterator.hasnext()) Facility facility = hsaiterator.next(); System.out.println("HSAID: " + facility.getfacilityid() + ", namn: " + facility.getname()); / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCaseHamtaTillgangligaTjansteutovare exempelkod = new UseCaseHamtaTillgangligaTjansteutovare(); exempelkod.usecasehamtatillgangligavardenheter(); catch (Exception e) e.printstacktrace(); Hämtar tillgänglia vårdenheter. Exempel på programexekvering Tillgängliga vårdenheter: HSAID: SE234232-9A32S, namn: Vårdecentralen Kronan HSAID: SE234232-2886A, namn: Skytteholms Vårdcentral Utskrift ifrån Java Console när programmet exekveras 4.4 Hämta tillgängliga tjänsteutövare Axis 1.4.1 För att se XML datat som finns i SOAP Body, se ref [11]. package com.mawell.nlt.consumer; import java.net.malformedurlexception; import org.apache.axis2.databinding.types.uri; import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.technicalexception; import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub; import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.attributedur import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.countycode; import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.facility; import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.getavailable import Sidan 8 av 16

rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.getavailablefacilit import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.getavailablefacilit import rivtabp20._1.getavailablefacilities.carelisting.crm.riv.getavailablefacilitiesresponderservicestub.to; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Hämta tillgänglia tjänsteutövare". Tjänsteutövare kan vara en vårdenhet. @author Robert Siwerz, www.mawell.com. / public class UseCaseHamtaTillgangligaTjansteutovareAxis / Exempelkod för Use Case "Hämtar tillgängliga tjänsteutövare". @author Robert Siwerz,www.mawell.com. @throws Fel vid kommunikation med tjänsten. / public void usecasehamtatillgangligavardenheter() throws MalformedURLException GetAvailableFacilitiesResponse response = null; GetAvailableFacilitiesResponderServiceStub stub = new GetAvailableFacilitiesResponderServiceStub("http://127.0.0.1:8088/mockGetAvailableFacilitiesResponderBinding?WSDL"); GetAvailableFacilities getavailableserviceproviders0 = new GetAvailableFacilities(); GetAvailableFacilitiesRequestType data = new GetAvailableFacilitiesRequestType(); CountyCode countycode = new CountyCode(); countycode.setcountycode("01"); data.setcountycode(countycode); getavailableserviceproviders0.setgetavailablefacilities(data); To to1 = new To(); AttributedURIType logicaladdress = new AttributedURIType(); URI uri = new URI(); uri.setpath("se239482390-23sad"); logicaladdress.setanyuri(uri); // HSAID till huvudmannen som skall svara på frågan. to1.setto(logicaladdress); // Hämta tillgängliga tjänsteutövare. response = stub.getavailablefacilities(getavailableserviceproviders0, to1); catch (TechnicalException e) // Gör ett nytt försök... catch (Exception e) e.printstacktrace(); return; // Skriver att tillgängliga tjänsteutövare. Facility[] hsaids = response.getgetavailablefacilitiesresponse().gethealthcare_facilities(); System.out.println("Tillgängliga vårdenheter:"); for (int i =0; i < hsaids.length; i++) Sidan 9 av 16

Facility serviceprovider = hsaids[i]; System.out.println("HSAID: " + serviceprovider.getfacilityid() + ", " + serviceprovider.getname()); / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCaseHamtaTillgangligaTjansteutovareAxis exempelkod = new UseCaseHamtaTillgangligaTjansteutovareAxis(); exempelkod.usecasehamtatillgangligavardenheter(); catch (Exception e) e.printstacktrace(); Hämtar tillgänglia vårdenheter. Exempel på programexekvering Tillgängliga vårdenheter: HSAID: SE234232-9A32S, namn: Vårdecentralen Kronan HSAID: SE234232-2886A, namn: Skytteholms Vårdcentral Utskrift ifrån Java Console när programmet exekveras 4.5 Göra tjänsteval JAXWS-RI För att se XML datat som finns i SOAP Body, se ref [13]. package com.mawell.nlt.consumer; import java.net.malformedurlexception; import java.net.url; import javax.xml.namespace.qname; import javax.xml.ws.service; import org.w3._2005._08.addressing.attributeduritype; import riv.crm.carelisting.createlisting._1.rivtabp20.createlistingresponderinterface; import riv.crm.carelisting.createlisting._1.rivtabp20.invalidfacilityexception; import riv.crm.carelisting.createlisting._1.rivtabp20.personnotfoundexception; import riv.crm.carelisting.createlisting._1.rivtabp20.technicalexception; import riv.crm.carelisting.createlistingresponder._1.createlistingrequesttype; import riv.crm.carelisting.createlistingresponder._1.createlistingresponsetype; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Sidan 10 av 16

http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Göra Tjänsteval". @author Robert Siwerz,www.mawell.com. / public class UseCasePerformAListing private void usecaseperformaspecificlisting() throws MalformedURLException // Hämtar referens till SEI (Service Endpoint Interface). QName servicename = new QName("urn:riv:crm:carelisting:CreateListing:1:rivtabp20", "CreateListingResponderService"); Service service = Service.create(new URL( "http://127.0.0.1:8088/mockcreatelistingresponderbinding?wsdl"), servicename); CreateListingResponderInterface listingsei = service.getport(createlistingresponderinterface.class); AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("01"); // Områdeskod // Skapar ett fråge objekt. CreateListingRequestType request = new CreateListingRequestType(); request.setpersonid("195005055005"); request.sethealthcarefacility("se345345-asd323"); // Utför tjänstevalet. CreateListingResponseType response = listingsei.createlisting(logicaladdress, request); String status = (response.issuccess() == true)? "OK" : "FEL"; System.out.println("Listnings status: " + status); System.out.println("Kommleterande information om listningsstatus: " + response.getcomment()); System.out.println("Kod från listningstjänsten: " + response.getsystemcode()); catch (PersonNotFoundException e) System.out.println("Felkod:" + e.getfaultinfo().getcode()); catch (InvalidFacilityException e) System.out.println("Felkod:" + e.getfaultinfo().getcode()); catch (TechnicalException e) // Gör ett nytt försök... / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCasePerformAListing exempelkod = new UseCasePerformAListing(); exempelkod.usecaseperformaspecificlisting(); catch (Exception e) e.printstacktrace(); Sidan 11 av 16

Göra ett vårdval för en specifik person och vårdenhet. Exempel på programexekvering Listnings status: FEL Kommleterande information om listningsstatus: Listningen genomfördes inte pga. kö på vårdenheten Kod från listningstjänsten: 1 Utskrift ifrån Java Console när programmet exekveras 4.6 Hämta listningstyper JAXWS-RI För att se XML datat som finns i SOAP Body, se ref [10]. package com.mawell.nlt.consumer; import java.net.malformedurlexception; import java.net.url; import java.util.list; import javax.xml.namespace.qname; import javax.xml.ws.service; import org.w3._2005._08.addressing.attributeduritype; import riv.crm.carelisting.getlistingtypes._1.rivtabp20.getlistingtypesresponderinterface; import riv.crm.carelisting.getlistingtypes._1.rivtabp20.technicalexception; import riv.crm.carelisting.getlistingtypesresponder._1.getlistingtypesrequesttype; import riv.crm.carelisting.getlistingtypesresponder._1.getlistingtypesresponsetype; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Hämta tillgänglia listningstyper, t.ex BVC, HLM". @author Robert Siwerz, www.mawell.com. / public class UseCaseGetListingTypes public void usecasegetlistingtypes() throws MalformedURLException // Hämtar referens till SEI (Service Endpoint Interface). QName servicename = new QName("urn:riv:crm:carelisting:GetListingTypes:1:rivtabp20", "GetListingTypesResponderService"); Service service = Service.create(new URL("http://127.0.0.1:8088/mockGetListingTypesResponderBinding?WSDL"), servicename); GetListingTypesResponderInterface listingsei = Sidan 12 av 16

service.getport(getlistingtypesresponderinterface.class); // Hämta tillgängliga tjänsteutövare. AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("se239482390-23sad"); // HSAID till huvudmannen som skall svara på frågan. GetListingTypesRequestType request = new GetListingTypesRequestType(); GetListingTypesResponseType response = null; response = listingsei.getlistingtypes(logicaladdress, request); catch (TechnicalException e) // Gör ett nytt försök... // Itererar över listan med listningstyper. System.out.println("Möjliga listningsval för personen"); List<String> listingtypes = response.getlistingtype(); for(string type : listingtypes) System.out.println("Listningstyp: " + type); / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCaseGetListingTypes exempelkod = new UseCaseGetListingTypes(); exempelkod.usecasegetlistingtypes(); catch (Exception e) e.printstacktrace(); Exempel på programexekvering Möjliga listningsval för personen Listningstyp: BVC Listningstyp: HLM Utskrift ifrån Java Console när programmet exekveras 4.7 Hämta köinformation för en person JAXWS-RI package com.mawell.nlt.consumer; import java.net.malformedurlexception; import java.net.url; import javax.xml.namespace.qname; import javax.xml.ws.service; import org.w3._2005._08.addressing.attributeduritype; import riv.crm.carelisting._1.personqueuestatus; import Sidan 13 av 16

riv.crm.carelisting.getpersonqueuestatus._1.rivtabp20.getpersonqueuestatusresponderinterface; import riv.crm.carelisting.getpersonqueuestatus._1.rivtabp20.personnotfoundexception; import riv.crm.carelisting.getpersonqueuestatus._1.rivtabp20.technicalexception; import riv.crm.carelisting.getpersonqueuestatusresponder._1.getpersonqueuestatusrequesttype; import riv.crm.carelisting.getpersonqueuestatusresponder._1.getpersonqueuestatusresponsetype; / Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/license-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Exempelkod för användningsfallet "Hämta köinformation för en person". @author Daniel Berggren, www.mawell.com. / public class UseCaseGetPersonQueueStatus public void usecasegetpersonqueuestatus() throws MalformedURLException // Hämtar referens till SEI (Service Endpoint Interface). QName servicename = new QName("urn:riv:crm:carelisting:GetPersonQueueStatus:1:rivtabp20", "GetPersonQueueStatusResponderService"); Service service = Service.create(new URL("http://localhost:8088/mockGetPersonQueueStatusResponderBinding?WSDL"), servicename); GetPersonQueueStatusResponderInterface listingsei = service.getport(getpersonqueuestatusresponderinterface.class); // Hämta köstsatus för person AttributedURIType logicaladdress = new AttributedURIType(); logicaladdress.setvalue("01"); // Områdeskod GetPersonQueueStatusRequestType request = new GetPersonQueueStatusRequestType(); request.setpersonid("1212121212-1212"); GetPersonQueueStatusResponseType response = null; response = listingsei.getpersonqueuestatus(logicaladdress, request); catch(personnotfoundexception e) catch(technicalexception e) // Itererar över listan med listningstyper. System.out.println("Köstatus för personen ( " + request.getpersonid() + ") är"); if(response.getqueuestatus()==personqueuestatus.in_queue) System.out.println(" står i kö"); System.out.println(" ---------------"); System.out.println(" På vårdenheten:"); System.out.println(" HsaId: " + response.gethealthcarefacility().getfacilityid()); System.out.println(" köstatus för vårdenheten: " + Sidan 14 av 16

response.gethealthcarefacility().ishasqueue()); System.out.println(" lisningstyper:"); for (String listingtype:response.gethealthcarefacility().getsupportedlistingtypes()) System.out.println(" " + listingtype); else System.out.println(" står inte i kö"); / En point i Java applikationen. @param args kommando-prompt argument. / public static void main(string[] args) UseCaseGetPersonQueueStatus exempelkod = new UseCaseGetPersonQueueStatus(); exempelkod.usecasegetpersonqueuestatus(); catch (Exception e) e.printstacktrace(); Exempel på programexekvering Köstatus för personen ( 1212121212-1212) är står i kö --------------- På vårdenheten: HsaId: SE2342322-886A köstatus för vårdenheten: true lisningstyper: - BVC - HLM Utskrift ifrån Java Console när programmet exekveras 5. Testning För att säkerställa att Anslutningspunkten/Konsument fungerar som den skall så behöver tester göras som simulerar användningsfallen. Testerna kan skrivas för hand eller alternativt kan testverktyg används som simulerar användningsfallen. Ett sådant testverktyg är soapui (se ref[4]). 6. Referenser [1] - RIV Tekniska anvisningar (Regelverk för Interoperabilitet inom Vård och omsorg): http://rivta.forge.osor.eu/ [2] EN13606-1: http://www.chime.ucl.ac.uk/resources/cen/en13606-1/ [3] wsimport: http://java.sun.com/javase/6/docs/technotes/tools/share/wsimport.html [4] soapui: http://www.soapui.org/ [5] VIT Boken: http://arkitekturledningen.se/undermappar/links/vitstart.htm Sidan 15 av 16

[6] Meddelandestruktur, Meddelandestruktur_Visa_vårdval_Nationell_Listningstjänst_EN13606_version _0.1.xlsx [7] Apache CFX: http://cxf.apache.org/ [8] Metro: https://metro.dev.java.net/ [9] Hämta vårdval: SOAP exempel_visa_tjänsteval.xml [10] Göra vårdval: SOAP exempel_göra_tjänsteval.xml [11] Visa tillgängliga vårdenheter: SOAP exempel_hämta_möjliga_tjänsteutövare.xml [12] JSR 181 Web Services Metadata: http://jcp.org/en/jsr/detail?id=181 [13] Visa listningstyper: SOAP exempel_hämta_listningstyper.xml Sidan 16 av 16