Mercurial > hg > digilibservice
changeset 7:39c4892724ae
new version with maven modules for service and client.
author | casties |
---|---|
date | Thu, 16 Jun 2011 17:33:06 +0200 |
parents | 913bc132ed96 |
children | 99bd25677ba8 |
files | .hgignore client/pom.xml client/src/main/java/info/textgrid/middleware/digilib/clients/cli/DigilibCli.java pom.xml service/pom.xml service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java service/src/main/webapp/WEB-INF/DigilibService.wsdl service/src/main/webapp/WEB-INF/beans.xml service/src/main/webapp/WEB-INF/web.xml service/src/main/webapp/index.jsp src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java src/main/webapp/WEB-INF/DigilibService.wsdl src/main/webapp/WEB-INF/beans.xml src/main/webapp/WEB-INF/web.xml src/main/webapp/index.jsp |
diffstat | 15 files changed, 550 insertions(+), 353 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Wed Jun 08 17:06:03 2011 +0200 +++ b/.hgignore Thu Jun 16 17:33:06 2011 +0200 @@ -6,4 +6,18 @@ syntax: regexp ^\.project$ syntax: regexp -^\.settings$ \ No newline at end of file +^\.settings$ +syntax: regexp +^client/target$ +syntax: regexp +^service/target$ +syntax: regexp +^client/test\.bin$ +syntax: regexp +^client/\.settings$ +syntax: regexp +^service/\.settings$ +syntax: regexp +\.classpath$ +syntax: regexp +\.project$ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/pom.xml Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,46 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>digilibservice</artifactId> + <groupId>info.textgrid</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <groupId>info.textgrid</groupId> + <artifactId>digilibservice-client</artifactId> + <version>1.0-SNAPSHOT</version> + <packaging>jar</packaging> + <dependencies> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf</artifactId> + <version>${cxf.version}</version> + <type>pom</type> + </dependency> + </dependencies> + <build> + <!-- <finalName>digilibservice</finalName> --> + <plugins> + <plugin> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-codegen-plugin</artifactId> + <version>${cxf.version}</version> + <executions> + <execution> + <id>generate-digilibservice-client</id> + <phase>generate-sources</phase> + <configuration> + <wsdlOptions> + <wsdlOption> + <wsdl>../service/src/main/webapp/WEB-INF/DigilibService.wsdl</wsdl> + </wsdlOption> + </wsdlOptions> + </configuration> + <goals> + <goal>wsdl2java</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/main/java/info/textgrid/middleware/digilib/clients/cli/DigilibCli.java Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,68 @@ +/** + * + */ +package info.textgrid.middleware.digilib.clients.cli; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import javax.xml.ws.Holder; + +import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService; +import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType; + +/** + * @author casties + * + */ +public class DigilibCli { + + /** + * @param args + */ + public static void main(String[] args) { + if (args.length != 4) { + System.err.println("use: DgibilibCli SID URI QUERY FILENAME"); + System.exit(1); + } + String sid = args[0]; + String uri = args[1]; + String query = args[2]; + String filename = args[3]; + // call service + byte[] imageData = getScaledImage(sid, uri, query); + // try to copy to file + System.out.println("writing " + filename); + File f = new File(filename); + try { + OutputStream ostream = new FileOutputStream(f); + ostream.write(imageData); + ostream.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + System.out.println("Done."); + } + + public static byte[] getScaledImage(String sid, String uri, String query) { + DigilibService service = new DigilibService(); + DigilibServicePortType port = service.getDigilibServicePort(); + String logParam = null; + // 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); + return imageData.value; + } + +}
--- a/pom.xml Wed Jun 08 17:06:03 2011 +0200 +++ b/pom.xml Thu Jun 16 17:33:06 2011 +0200 @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>info.textgrid</groupId> <artifactId>digilibservice</artifactId> - <packaging>war</packaging> + <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>digilibservice Maven Webapp</name> <url>http://maven.apache.org</url> @@ -12,6 +12,7 @@ <cxf.version>2.3.3</cxf.version> <jetty.version>6.1.15</jetty.version> </properties> + <dependencyManagement> <dependencies> <dependency> <groupId>info.textgrid.middleware</groupId> @@ -54,6 +55,7 @@ <scope>compile</scope> </dependency> </dependencies> + </dependencyManagement> <repositories> <repository> <id>archiva.internal.http</id> @@ -78,30 +80,8 @@ </snapshots> </repository> </repositories> - <build> - <finalName>digilibservice</finalName> - <plugins> - <plugin> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-codegen-plugin</artifactId> - <version>${cxf.version}</version> - <executions> - <execution> - <id>generate-digilibservice-sources</id> - <phase>generate-sources</phase> - <configuration> - <wsdlOptions> - <wsdlOption> - <wsdl>src/main/webapp/WEB-INF/DigilibService.wsdl</wsdl> - </wsdlOption> - </wsdlOptions> - </configuration> - <goals> - <goal>wsdl2java</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> + <modules> + <module>service</module> + <module>client</module> + </modules> </project>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/pom.xml Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,80 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>digilibservice</artifactId> + <groupId>info.textgrid</groupId> + <version>1.0-SNAPSHOT</version> + </parent> + <groupId>info.textgrid</groupId> + <artifactId>digilibservice-service</artifactId> + <packaging>war</packaging> + <version>1.0-SNAPSHOT</version> + <dependencies> + <dependency> + <groupId>info.textgrid.middleware</groupId> + <artifactId>tgcrud-client</artifactId> + <version>1.2-BETA-SNAPSHOT</version> + <!-- <version>1.2.1-SNAPSHOT</version> --> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf</artifactId> + <version>${cxf.version}</version> + <type>pom</type> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-frontend-jaxrs</artifactId> + <version>${cxf.version}</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-frontend-jaxws</artifactId> + <version>${cxf.version}</version> + </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-transports-http</artifactId> + <version>${cxf.version}</version> + </dependency> + <dependency> + <groupId>digilib</groupId> + <artifactId>digilib-common</artifactId> + <version>2.0-SNAPSHOT</version> + <type>jar</type> + <scope>compile</scope> + </dependency> + </dependencies> + <build> + <finalName>digilibservice</finalName> + <plugins> + <plugin> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-codegen-plugin</artifactId> + <version>${cxf.version}</version> + <executions> + <execution> + <id>generate-digilibservice-sources</id> + <phase>generate-sources</phase> + <configuration> + <wsdlOptions> + <wsdlOption> + <wsdl>src/main/webapp/WEB-INF/DigilibService.wsdl</wsdl> + </wsdlOption> + </wsdlOptions> + </configuration> + <goals> + <goal>wsdl2java</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,187 @@ +package info.textgrid.middleware.digilib.services.scaler; + +import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType; +import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibServicePortType; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService; +import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService_Service; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.MalformedURLException; +import java.net.URL; + +import javax.activation.DataHandler; +import javax.jws.WebService; +import javax.xml.ws.BindingProvider; +import javax.xml.ws.Holder; +import javax.xml.ws.soap.SOAPBinding; + +import digilib.image.ImageJobDescription; +import digilib.image.ImageLoaderDocuImage; +import digilib.image.ImageOpException; +import digilib.image.ImageWorker; +import digilib.io.ImageCacheStream; +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") +public class Scaler implements DigilibServicePortType { + + @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); + + // Get TG-crud service. + String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl"); + URL location = null; + try { + location = new URL(serverUrl); + } catch (MalformedURLException 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); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/src/main/webapp/WEB-INF/DigilibService.wsdl Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" + xmlns:tns="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService" + xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" + name="DigilibService" + targetNamespace="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService"> + <wsdl:types> + <xsd:schema + targetNamespace="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService"> + <xsd:element name="getScaledImage"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="sessionId" type="xsd:string" + minOccurs="1" maxOccurs="1" /> + <xsd:element name="uri" type="xsd:anyURI" + minOccurs="1" maxOccurs="1"> + </xsd:element> + <xsd:element name="query" type="xsd:string" + minOccurs="1" maxOccurs="1"></xsd:element> + <xsd:element name="logParameter" type="xsd:string"></xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + <xsd:element name="getScaledImageResponse"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="mimeType" type="xsd:string" + minOccurs="1" maxOccurs="1" /> + <xsd:element name="imageData" type="xsd:base64Binary" + minOccurs="1" maxOccurs="1"> + </xsd:element> + <xsd:element name="width" type="xsd:int"></xsd:element> + <xsd:element name="height" type="xsd:int"></xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:schema> + </wsdl:types> + <wsdl:message name="getScaledImageRequest"> + <wsdl:part element="tns:getScaledImage" name="parameters" /> + </wsdl:message> + <wsdl:message name="getScaledImageResponse"> + <wsdl:part element="tns:getScaledImageResponse" name="parameters" /> + </wsdl:message> + <wsdl:portType name="DigilibServicePortType"> + <wsdl:operation name="getScaledImage"> + <wsdl:input message="tns:getScaledImageRequest" /> + <wsdl:output message="tns:getScaledImageResponse" /> + </wsdl:operation> + </wsdl:portType> + <wsdl:binding name="DigilibServiceSoapBinding" type="tns:DigilibServicePortType"> + <soap:binding style="document" + transport="http://schemas.xmlsoap.org/soap/http" /> + <wsdl:operation name="getScaledImage"> + <soap:operation + soapAction="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService" /> + <wsdl:input> + <soap:body use="literal" /> + </wsdl:input> + <wsdl:output> + <soap:body use="literal" /> + </wsdl:output> + </wsdl:operation> + </wsdl:binding> + <wsdl:service name="DigilibService"> + <wsdl:port binding="tns:DigilibServiceSoapBinding" name="DigilibServicePort"> + <soap:address + location="http://localhost:8080/digilibservice-service/service" /> + </wsdl:port> + </wsdl:service> +</wsdl:definitions>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/src/main/webapp/WEB-INF/beans.xml Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:jaxws="http://cxf.apache.org/jaxws" + xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xsi:schemaLocation=" +http://www.springframework.org/schema/beans +http://www.springframework.org/schema/beans/spring-beans.xsd +http://cxf.apache.org/jaxws +http://cxf.apache.org/schemas/jaxws.xsd +http://cxf.apache.org/jaxrs +http://cxf.apache.org/schemas/jaxrs.xsd +"> + + <description> + Configuration digilibservice + </description> + + <import resource="classpath:META-INF/cxf/cxf.xml"/> + <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> + <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> + <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> + + <!-- Here the REST-Service Endpoint Beans --> + <bean id="scaler" class="info.textgrid.middleware.digilib.services.scaler.Scaler"> + </bean> + + <jaxws:endpoint id="digilibservice" wsdlLocation="/WEB-INF/DigilibService.wsdl" + implementor="#scaler" address="/service"> + </jaxws:endpoint> + + <!-- Rest-Endpoint Configuration + <jaxrs:server id="root" address="/rest"> + <jaxrs:serviceBeans> + <ref bean="rest" /> + </jaxrs:serviceBeans> + </jaxrs:server> --> + +</beans>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/src/main/webapp/WEB-INF/web.xml Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,32 @@ +<!DOCTYPE web-app PUBLIC + "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd" > + +<web-app> + + <display-name>TGSearch Webservice - public instance</display-name> + + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>WEB-INF/beans.xml</param-value> + </context-param> + <listener> + <listener-class> + org.springframework.web.context.ContextLoaderListener + </listener-class> + </listener> + + <servlet> + <servlet-name>CXFServlet</servlet-name> + <display-name>CXF Servlet</display-name> + <servlet-class> + org.apache.cxf.transport.servlet.CXFServlet + </servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> +</web-app>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/service/src/main/webapp/index.jsp Thu Jun 16 17:33:06 2011 +0200 @@ -0,0 +1,5 @@ +<html> +<body> +<h2>Hello World!</h2> +</body> +</html>
--- a/src/main/java/info/textgrid/middleware/digilib/services/scaler/Scaler.java Wed Jun 08 17:06:03 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ -package info.textgrid.middleware.digilib.services.scaler; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.MalformedURLException; -import java.net.URL; - -import javax.activation.DataHandler; -import javax.jws.WebService; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.Holder; -import javax.xml.ws.soap.SOAPBinding; - -import digilib.image.ImageJobDescription; -import digilib.image.ImageLoaderDocuImage; -import digilib.image.ImageOpException; -import digilib.image.ImageWorker; -import digilib.io.ImageCacheStream; -import digilib.servlet.DigilibConfiguration; -import digilib.servlet.DigilibRequest; - -import info.textgrid.namespaces.metadata.core._2010.MetadataContainerType; -import info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.AuthFault; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.IoFault; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.MetadataParseFault; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ObjectNotFoundFault; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.ProtocolNotImplementedFault; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService; -import info.textgrid.namespaces.middleware.tgcrud.services.tgcrudservice.TGCrudService_Service; - -@WebService(targetNamespace = "http://textgrid.info/namespaces/middleware/digilib/services/DigilibService", - serviceName="DigilibService", portName="DigilibServiceSOAP", - endpointInterface="info.textgrid.namespaces.middleware.digilib.services.digilibservice.DigilibService") -public class Scaler implements DigilibService { - - @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); - - // Get TG-crud service. - String serverUrl = "http://textgrid-ws3.sub.uni-goettingen.de/tgcrud/TGCrudService?wsdl"; // p.getProperty("crud_serverUrl"); - URL location = null; - try { - location = new URL(serverUrl); - } catch (MalformedURLException 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); - } - } - -}
--- a/src/main/webapp/WEB-INF/DigilibService.wsdl Wed Jun 08 17:06:03 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="DigilibService" targetNamespace="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService"> - <wsdl:types> - <xsd:schema targetNamespace="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService"> - <xsd:element name="getScaledImage"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="sessionId" type="xsd:string" - minOccurs="1" maxOccurs="1" /> - <xsd:element name="uri" type="xsd:anyURI" minOccurs="1" - maxOccurs="1"> - </xsd:element> - <xsd:element name="query" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element> - <xsd:element name="logParameter" type="xsd:string"></xsd:element> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="getScaledImageResponse"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="mimeType" type="xsd:string" minOccurs="1" - maxOccurs="1" /> - <xsd:element name="imageData" type="xsd:base64Binary" - minOccurs="1" maxOccurs="1"> - </xsd:element> - <xsd:element name="width" type="xsd:int"></xsd:element> - <xsd:element name="height" type="xsd:int"></xsd:element> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - </xsd:schema> - </wsdl:types> - <wsdl:message name="getScaledImageRequest"> - <wsdl:part element="tns:getScaledImage" name="parameters"/> - </wsdl:message> - <wsdl:message name="getScaledImageResponse"> - <wsdl:part element="tns:getScaledImageResponse" name="parameters"/> - </wsdl:message> - <wsdl:portType name="DigilibService"> - <wsdl:operation name="getScaledImage"> - <wsdl:input message="tns:getScaledImageRequest"/> - <wsdl:output message="tns:getScaledImageResponse"/> - </wsdl:operation> - </wsdl:portType> - <wsdl:binding name="DigilibServiceSOAP" type="tns:DigilibService"> - <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> - <wsdl:operation name="getScaledImage"> - <soap:operation soapAction="http://textgrid.info/namespaces/middleware/digilib/services/DigilibService/NewOperation"/> - <wsdl:input> - <soap:body use="literal"/> - </wsdl:input> - <wsdl:output> - <soap:body use="literal"/> - </wsdl:output> - </wsdl:operation> - </wsdl:binding> - <wsdl:service name="DigilibService"> - <wsdl:port binding="tns:DigilibServiceSOAP" name="DigilibServiceSOAP"> - <soap:address location="http://localhost:8080/digilibservice/service"/> - </wsdl:port> - </wsdl:service> -</wsdl:definitions>
--- a/src/main/webapp/WEB-INF/beans.xml Wed Jun 08 17:06:03 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:jaxws="http://cxf.apache.org/jaxws" - xmlns:jaxrs="http://cxf.apache.org/jaxrs" - xsi:schemaLocation=" -http://www.springframework.org/schema/beans -http://www.springframework.org/schema/beans/spring-beans.xsd -http://cxf.apache.org/jaxws -http://cxf.apache.org/schemas/jaxws.xsd -http://cxf.apache.org/jaxrs -http://cxf.apache.org/schemas/jaxrs.xsd -"> - - <description> - Configuration digilibservice - </description> - - <import resource="classpath:META-INF/cxf/cxf.xml"/> - <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" /> - <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> - <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> - - <!-- Here the REST-Service Endpoint Beans --> - <bean id="scaler" class="info.textgrid.middleware.digilib.services.scaler.Scaler"> - </bean> - - <jaxws:endpoint id="digilibservice" wsdlLocation="/WEB-INF/DigilibService.wsdl" - implementor="#scaler" address="/service"> - </jaxws:endpoint> - - <!-- Rest-Endpoint Configuration - <jaxrs:server id="root" address="/rest"> - <jaxrs:serviceBeans> - <ref bean="rest" /> - </jaxrs:serviceBeans> - </jaxrs:server> --> - -</beans>
--- a/src/main/webapp/WEB-INF/web.xml Wed Jun 08 17:06:03 2011 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -<!DOCTYPE web-app PUBLIC - "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" - "http://java.sun.com/dtd/web-app_2_3.dtd" > - -<web-app> - - <display-name>TGSearch Webservice - public instance</display-name> - - <context-param> - <param-name>contextConfigLocation</param-name> - <param-value>WEB-INF/beans.xml</param-value> - </context-param> - <listener> - <listener-class> - org.springframework.web.context.ContextLoaderListener - </listener-class> - </listener> - - <servlet> - <servlet-name>CXFServlet</servlet-name> - <display-name>CXF Servlet</display-name> - <servlet-class> - org.apache.cxf.transport.servlet.CXFServlet - </servlet-class> - <load-on-startup>1</load-on-startup> - </servlet> - - <servlet-mapping> - <servlet-name>CXFServlet</servlet-name> - <url-pattern>/*</url-pattern> - </servlet-mapping> -</web-app>