changeset 10:fe0a111cc8f5

server creates tgcrud port in constructor. client takes external server url.
author casties
date Fri, 17 Jun 2011 17:07:42 +0200
parents 55bc70b1cb18
children ab4794707336
files client/src/main/java/info/textgrid/middleware/digilib/clients/cli/DigilibCli.java service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java
diffstat 2 files changed, 168 insertions(+), 147 deletions(-) [+]
line wrap: on
line diff
--- a/client/src/main/java/info/textgrid/middleware/digilib/clients/cli/DigilibCli.java	Thu Jun 16 18:39:32 2011 +0200
+++ b/client/src/main/java/info/textgrid/middleware/digilib/clients/cli/DigilibCli.java	Fri Jun 17 17:07:42 2011 +0200
@@ -17,7 +17,7 @@
 
 /**
  * @author casties
- *
+ * 
  */
 public class DigilibCli {
 
@@ -25,8 +25,9 @@
      * @param args
      */
     public static void main(String[] args) {
-        if (args.length != 4) {
-            System.err.println("use: DigilibCli SID URI QUERY FILENAME");
+        if (args.length < 4) {
+            System.err
+                    .println("use: DigilibCli SID URI QUERY FILENAME [SERVERURL]");
             System.exit(1);
         }
         String sid = args[0];
@@ -35,7 +36,12 @@
         String filename = args[3];
         URL serverUrl = null;
         try {
-            serverUrl = new URL("http://localhost:8080/digilibservice-service/service?wsdl");
+            if (args.length > 4) {
+                serverUrl = new URL(args[4]);
+            } else {
+                serverUrl = new URL(
+                        "http://localhost:8080/digilibservice-service/service?wsdl");
+            }
         } catch (MalformedURLException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
@@ -57,22 +63,24 @@
         System.out.println("Done.");
     }
 
-    public static byte[] getScaledImage(String sid, String uri, String query, URL serverUrl) {
+    public static byte[] getScaledImage(String sid, String uri, String query,
+            URL serverUrl) {
         DigilibService service = new DigilibService(serverUrl);
         DigilibServicePortType port = service.getDigilibServicePort();
         String logParam = null;
-        // Holder for return data 
+        // Holder for return data
         Holder<String> mimeType = new Holder<String>();
         Holder<byte[]> imageData = new Holder<byte[]>();
         Holder<Integer> width = new Holder<Integer>();
         Holder<Integer> height = new Holder<Integer>();
         // call service -- fills Holder
-        port.getScaledImage(sid, uri, query, logParam, mimeType, imageData, width, height);
-        System.out.println("mimeType="+mimeType.value);
-        System.out.println("imageData="+imageData.value);
-        System.out.println("width="+width.value);
-        System.out.println("height="+height.value);
+        port.getScaledImage(sid, uri, query, logParam, mimeType, imageData,
+                width, height);
+        System.out.println("mimeType=" + mimeType.value);
+        System.out.println("imageData=" + imageData.value);
+        System.out.println("width=" + width.value);
+        System.out.println("height=" + height.value);
         return imageData.value;
     }
-    
+
 }
--- a/service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Thu Jun 16 18:39:32 2011 +0200
+++ b/service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java	Fri Jun 17 17:07:42 2011 +0200
@@ -33,155 +33,168 @@
 import digilib.servlet.DigilibConfiguration;
 import digilib.servlet.DigilibRequest;
 
-@WebService(targetNamespace = "http://textgrid.info/namespaces/middleware/digilib/services/DigilibService", 
-        serviceName="DigilibService", portName="DigilibServicePort",
-        endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType")
+@WebService(targetNamespace = "http://textgrid.info/namespaces/middleware/digilib/services/DigilibService", serviceName = "DigilibService", portName = "DigilibServicePort", endpointInterface = "info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType")
 public class Scaler implements DigilibServicePortType {
 
+    private TGCrudService_Service tgcrudService;
+    private TGCrudService tgcrud;
+    private String tgcrudServerUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl";
+
+    /**
+     * CXF calls this constructor just once at service start time... (says
+     * Stefan Funk)
+     */
+    public Scaler() {
+        System.out.println("digilibservice Scaler starting...");
+        // Get TG-crud service.
+        tgcrudServerUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl";
+        createTgCrudService();
+    }
+
+    /**
+     * 
+     */
+    protected void createTgCrudService() {
+        URL location = null;
+        try {
+            location = new URL(tgcrudServerUrl);
+        } catch (MalformedURLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        System.out.println("TG-crud WSDL location: " + location);
+        tgcrudService = new TGCrudService_Service(location);
+        tgcrud = tgcrudService.getTGCrudPort();
+        // use MTOM
+        BindingProvider bindingProvider = (BindingProvider) tgcrud;
+        SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding();
+        binding.setMTOMEnabled(true);
+    }
+
     @Override
     public void getScaledImage(String sessionId, String uri, String query,
             String logParameter, Holder<String> mimeType,
             Holder<byte[]> imageData, Holder<Integer> width,
             Holder<Integer> height) {
 
-        System.out.println("getScaledImage! sid="+sessionId+" uri="+uri+" log="+logParameter);
+        System.out.println("getScaledImage! sid=" + sessionId + " uri=" + uri
+                + " log=" + logParameter);
+
+        if (tgcrud == null) {
+            // Create TG-crud service stub.
+            createTgCrudService();
+        }
+
+        // Create holders.
+        Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>();
+        Holder<DataHandler> dataHolder = new Holder<DataHandler>();
 
-        // Get TG-crud service.
-        String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl");
-        URL location = null;
+        // Start #READ operation.
         try {
-            location = new URL(serverUrl);
-        } catch (MalformedURLException e) {
+            String theSessionId = sessionId;
+            String theLogParameter = logParameter;
+            String theUri = uri;
+            String mode = "digilib";
+            long startTime = System.currentTimeMillis();
+            tgcrud.read(theSessionId, theLogParameter, theUri, metadataHolder,
+                    dataHolder);
+            System.out.println(Long.toString(System.currentTimeMillis()
+                    - startTime)
+                    + " ms");
+            System.out.println("READ: Title="
+                    + metadataHolder.value.getObject().getGeneric()
+                            .getProvided().getTitle().get(0));
+            InputStream istream = dataHolder.value.getInputStream();
+            String mt = metadataHolder.value.getObject().getGeneric()
+                    .getProvided().getFormat();
+            System.out.println("Stream=" + istream.toString() + " type=" + mt);
+            if (mode.equalsIgnoreCase("digilib")) {
+                // try scaling
+                DigilibConfiguration dlConfig = new DigilibConfiguration();
+                DigilibRequest dlReq = new DigilibRequest();
+                dlReq.setWithParamString(query, "&");
+                ImageJobDescription job = ImageJobDescription.getInstance(
+                        dlReq, dlConfig);
+                ImageCacheStream imgStream = new ImageCacheStream(istream, mt);
+                System.out.println("iis=" + imgStream.getImageInputStream());
+                ImageLoaderDocuImage img = new ImageLoaderDocuImage();
+                // reuse reader for stream input
+                img.reuseReader = true;
+                // identify image size
+                System.out.println("Identifying...");
+                img.identify(imgStream);
+                job.setDocuImage(img);
+                job.setInput(imgStream);
+                // use image worker
+                ImageWorker digilib = new ImageWorker(dlConfig, job);
+                System.out.println("Scaling with " + digilib);
+                digilib.call();
+                System.out.println(Long.toString(System.currentTimeMillis()
+                        - startTime)
+                        + " ms");
+                // save image to buffer
+                ByteArrayOutputStream ostream = new ByteArrayOutputStream();
+                img.writeImage("image/jpeg", ostream);
+                System.out.println("written in "
+                        + (System.currentTimeMillis() - startTime) + " ms");
+                // set buffer in Holder
+                imageData.value = ostream.toByteArray();
+                mimeType.value = "image/jpeg";
+                width.value = img.getWidth();
+                height.value = img.getHeight();
+                System.out.println("output set.");
+
+                /*
+                 * save to file File f = new File("/tmp/tgimg.jpg");
+                 * OutputStream ostream = new FileOutputStream(f);
+                 * img.writeImage("image/jpeg", ostream);
+                 * System.out.println(Long.toString(System.currentTimeMillis() -
+                 * startTime) + " ms");
+                 */
+            } else {
+                // try to copy to file
+                File f = new File("/tmp/tgimg.img");
+                OutputStream ostream = new FileOutputStream(f);
+                byte[] data = new byte[1024];
+                int l = istream.read(data);
+                while (l > -1) {
+                    ostream.write(data, 0, l);
+                    l = istream.read(data);
+                }
+                ostream.close();
+                System.out.println(Long.toString(System.currentTimeMillis()
+                        - startTime)
+                        + " ms");
+                System.out.println("Done writing " + f);
+            }
+        } catch (ObjectNotFoundFault e) {
+            // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+            // e.getClass().getSimpleName()));
+            e.printStackTrace();
+        } catch (MetadataParseFault e) {
+            // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+            // e.getClass().getSimpleName()));
+            e.printStackTrace();
+        } catch (IoFault e) {
+            // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+            // e.getClass().getSimpleName()));
+            e.printStackTrace();
+        } catch (ProtocolNotImplementedFault e) {
+            // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+            // e.getClass().getSimpleName()));
+            e.printStackTrace();
+        } catch (AuthFault e) {
+            // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
+            // e.getClass().getSimpleName()));
+            e.printStackTrace();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (ImageOpException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
 
-        System.out.println("TG-crud WSDL location: " + location.getProtocol()
-                + "://" + location.getHost() + ":"
-                + (location.getPort() == -1 ? "80" : location.getPort())
-                + location.getPath());
-
-        // Create TG-crud service stub.
-        if (serverUrl != null) {
-            // Use MTOM stub.
-            TGCrudService_Service service = new TGCrudService_Service(location);
-            TGCrudService tgcrud = service.getTGCrudPort();
-            BindingProvider bindingProvider = (BindingProvider) tgcrud;
-            SOAPBinding binding = (SOAPBinding) bindingProvider.getBinding();
-            binding.setMTOMEnabled(true);
-
-            // Create holders.
-            Holder<MetadataContainerType> metadataHolder = new Holder<MetadataContainerType>();
-            Holder<DataHandler> dataHolder = new Holder<DataHandler>();
-
-            // Start #READ operation.
-            try {
-                String theSessionId = sessionId;
-                String theLogParameter = logParameter;
-                String theUri = uri;
-                String mode = "digilib";
-                long startTime = System.currentTimeMillis();
-                tgcrud.read(theSessionId, theLogParameter, theUri,
-                        metadataHolder, dataHolder);
-                System.out.println(Long.toString(System.currentTimeMillis()
-                        - startTime)
-                        + " ms");
-                System.out.println("READ: Title="
-                        + metadataHolder.value.getObject().getGeneric()
-                                .getProvided().getTitle().get(0));
-                InputStream istream = dataHolder.value.getInputStream();
-                String mt = metadataHolder.value.getObject().getGeneric().getProvided().getFormat();
-                System.out.println("Stream="+istream.toString()+" type="+mt);
-                if (mode.equalsIgnoreCase("digilib")) {
-                    // try scaling
-                    DigilibConfiguration dlConfig = new DigilibConfiguration();
-                    DigilibRequest dlReq = new DigilibRequest();
-                    dlReq.setWithParamString(query, "&");
-                    ImageJobDescription job = ImageJobDescription.getInstance(dlReq, dlConfig);
-                    ImageCacheStream imgStream = new ImageCacheStream(istream, mt);
-                    System.out.println("iis="+imgStream.getImageInputStream());
-                    ImageLoaderDocuImage img = new ImageLoaderDocuImage();
-                    // reuse reader for stream input
-                    img.reuseReader = true;
-                    // identify image size
-                    System.out.println("Identifying...");
-                    img.identify(imgStream);
-                    job.setDocuImage(img);
-                    job.setInput(imgStream);
-                    // use image worker
-                    ImageWorker digilib = new ImageWorker(dlConfig, job);
-                    System.out.println("Scaling with "+digilib);
-                    digilib.call();
-                    System.out.println(Long.toString(System.currentTimeMillis()
-                            - startTime)
-                            + " ms");
-                    // save image to buffer
-                    ByteArrayOutputStream ostream = new ByteArrayOutputStream();
-                    img.writeImage("image/jpeg", ostream);
-                    System.out.println("written in "+(System.currentTimeMillis()-startTime)+" ms");
-                    // set buffer in Holder
-                    imageData.value = ostream.toByteArray();
-                    mimeType.value = "image/jpeg";
-                    width.value = img.getWidth();
-                    height.value = img.getHeight();
-                    System.out.println("output set.");
-
-                    /* save to file
-                    File f = new File("/tmp/tgimg.jpg");
-                    OutputStream ostream = new FileOutputStream(f);
-                    img.writeImage("image/jpeg", ostream);
-                    System.out.println(Long.toString(System.currentTimeMillis()
-                            - startTime)
-                            + " ms");
-                            */
-                } else {
-                    // try to copy to file
-                    File f = new File("/tmp/tgimg.img");
-                    OutputStream ostream = new FileOutputStream(f);
-                    byte[] data = new byte[1024];
-                    int l = istream.read(data);
-                    while (l > -1) {
-                        ostream.write(data, 0, l);
-                        l = istream.read(data);
-                    }
-                    ostream.close();
-                    System.out.println(Long.toString(System.currentTimeMillis()
-                            - startTime)
-                            + " ms");
-                    System.out.println("Done writing " + f);
-                }
-            } catch (ObjectNotFoundFault e) {
-                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
-                // e.getClass().getSimpleName()));
-                e.printStackTrace();
-            } catch (MetadataParseFault e) {
-                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
-                // e.getClass().getSimpleName()));
-                e.printStackTrace();
-            } catch (IoFault e) {
-                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
-                // e.getClass().getSimpleName()));
-                e.printStackTrace();
-            } catch (ProtocolNotImplementedFault e) {
-                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
-                // e.getClass().getSimpleName()));
-                e.printStackTrace();
-            } catch (AuthFault e) {
-                // System.out.println(TestServiceUtils.faultDetails(e.getFaultInfo(),
-                // e.getClass().getSimpleName()));
-                e.printStackTrace();
-            } catch (IOException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (ImageOpException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
-
-        } else {
-            System.out.println("No TG-crud server WSDL URL given!");
-            // assertTrue(false);
-        }
     }
 
 }