Usługa sieciowa do upload'u plików XML
Od wersji 7.1 system POLon udostępnia usługę sieciową umożliwiającą automatyczne przesłanie pliku XML.
Usługa ImportWebservice udostępnia następujące operacje:
- uploadImportFile - przesłanie pliku XML
- getImportStatus - sprawdzenie statusu importu
Linki
- Produkcja: https://polon.nauka.gov.pl/opi-ws
Operacja uploadImportFile
Operacja na wejściu przyjmuje:
- authToken - token autentykacyjny - do czasu wdrożenia w OPI systemu centralnej autentykacji należy podać login, hasło i identyfikator instytucji w systemie POLon zdefiniowane w następującej postaci:
{"login": "my_login", "password": "my_passwd", "context": "inst_code"}
- całość powinna zostać zakodowana Base64
- institutionId - identyfikator instytucji w POLon
- file - plik zip
- description - opcjonalny opis
Przykładowy kod ustawiający odpowiednią wartość nagłówka HTTP:HttpHeaders headers = new HttpHeaders(); String authorisation = "{"login": " + login + ", "password": " + passwd + ", "context": " + instCode + "}"; byte[] encodedAuthorisation = Base64.encodeBase64(authorisation.getBytes()); headers.add("Authorization", new String(encodedAuthorisation));
Plik zapisywany jest w systemie do przetworzenia, a na wyjściu operacja zwraca:
- return - identyfikator importu, służący do identyfikacji
Plik powinien zostać przesłany z użyciem mechanizmu MTOM.
Przykładowy kod wywołujący usługę (Źródło):
package net.codejava.ws.mtom.client; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.ws.soap.MTOMFeature; /** * A client program that demonstrates how to use MTOM to optimize binary data * transfer with JAX-WS web services. * @author www.codejava.net * */ public class WebServiceAppClient { public static void main(String[] args) { // connects to the web service FileTransfererService service = new FileTransfererService(); FileTransferer port = service.getFileTransfererPort(new MTOMFeature(10240)); String fileName = "binary.png"; String filePath = "e:/Test/Client/Upload/" + fileName; File file = new File(filePath); // uploads a file try { FileInputStream fis = new FileInputStream(file); BufferedInputStream inputStream = new BufferedInputStream(fis); byte[] imageBytes = new byte[(int) file.length()]; inputStream.read(imageBytes); port.upload(file.getName(), imageBytes); inputStream.close(); System.out.println("File uploaded: " + filePath); } catch (IOException ex) { System.err.println(ex); } // downloads another file fileName = "camera.png"; filePath = "E:/Test/Client/Download/" + fileName; byte[] fileBytes = port.download(fileName); try { FileOutputStream fos = new FileOutputStream(filePath); BufferedOutputStream outputStream = new BufferedOutputStream(fos); outputStream.write(fileBytes); outputStream.close(); System.out.println("File downloaded: " + filePath); } catch (IOException ex) { System.err.println(ex); } } }
Operacja nie jest idempotentna, ponowne przesłanie tego samego pliku skutkuje błędem.
Operacja getImportStatus
Operacja na wejściu przyjmuje:
- authToken - token autentykacyjny - jak w uploadImportFile
- importId - identyfikator importu
Operacja zwraca:
- importId - identyfikator importu
- institutionId - identyfikator instytucji w POLon
- startDate - datę/godzinę rozpoczęcia przetwarzania pliku
- endDate - datę/godzinę zakończenia przetwarzania pliku
- status - status operacji importu