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

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