aboutsummaryrefslogtreecommitdiff
path: root/spss.server/src/at/gv
diff options
context:
space:
mode:
Diffstat (limited to 'spss.server/src/at/gv')
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/SPSSFactory.java17
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/common/Content.java14
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/common/ContentLocRef.java17
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/impl/ContentLocRefImpl.java44
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/impl/SPSSFactoryImpl.java7
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/api/xmlbind/RequestParserUtils.java11
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/server/invoke/DataObjectFactory.java146
-rw-r--r--spss.server/src/at/gv/egovernment/moa/spss/server/service/AxisHandler.java2
8 files changed, 220 insertions, 38 deletions
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/SPSSFactory.java b/spss.server/src/at/gv/egovernment/moa/spss/api/SPSSFactory.java
index 178a45273..dfa8927e1 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/api/SPSSFactory.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/SPSSFactory.java
@@ -57,6 +57,7 @@ import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureResponse;
* this instance, concrete MOA SP/SS API object can be created.
*
* @author Patrick Peck
+ * @author Gregor Karlinger
* @version $Id$
*/
public abstract class SPSSFactory {
@@ -779,6 +780,22 @@ public abstract class SPSSFactory {
String referenceURI);
/**
+ * Create a new <code>Content</code> object containing location reference data.
+ *
+ * @param locationReferenceURI a URI pointing to the actual remote location of the content.
+ *
+ * @param referenceURI An URI identifying the data. May be <code>null</code>.
+ *
+ * @return The <code>Content</code> object containing the data.
+ *
+ * @pre locationReferenceURI != null
+ * @post return != null
+ */
+ public abstract Content createContent(
+ String locationReferenceURI,
+ String referenceURI);
+
+ /**
* Create a new <code>Content</code> object containing XML data.
*
* @param xmlData The XML data contained in the new <code>Content</code>.
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/common/Content.java b/spss.server/src/at/gv/egovernment/moa/spss/api/common/Content.java
index 173e9d395..0777c3d65 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/api/common/Content.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/common/Content.java
@@ -5,29 +5,39 @@ package at.gv.egovernment.moa.spss.api.common;
*
* @author Patrick Peck
* @author Stephan Grill
+ * @author Gregor Karlinger
* @version $Id$
*/
public interface Content {
+
/**
* Indicates that this object contains a URI reference to some content.
*/
public static final int REFERENCE_CONTENT = 0;
+
/**
* Indicates that this object contains binary content.
*/
public static final int BINARY_CONTENT = 1;
+
/**
* Indicates that this object contains XML content.
*/
public static final int XML_CONTENT = 2;
+
+ /**
+ * Indicates that this object contains a location reference content.
+ */
+ public static final int LOCREF_CONTENT = 3;
/**
* Gets the type of content contained in this object.
*
- * @return The type of content, either <code>BINARY_CONTENT</code> or
- * <code>XML_CONTENT</code>
+ * @return The type of content, one of <code>BINARY_CONTENT</code>, <code>XML_CONTENT</code>, <code>
+ * REFERENCE_CONTENT</code> or <code>LOCREF_CONTENT</code>.
*/
public int getContentType();
+
/**
* Gets the reference to the content data (a URI).
*
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/common/ContentLocRef.java b/spss.server/src/at/gv/egovernment/moa/spss/api/common/ContentLocRef.java
new file mode 100644
index 000000000..f640f2b92
--- /dev/null
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/common/ContentLocRef.java
@@ -0,0 +1,17 @@
+package at.gv.egovernment.moa.spss.api.common;
+
+/**
+ * Encapsulates location reference content.
+ *
+ * @author Gregor Karlinger
+ * @version $Id$
+ */
+public interface ContentLocRef extends Content
+{
+ /**
+ * Gets the location reference URI pointing to the actual remote location of the content.
+ *
+ * @return the location reference URI.
+ */
+ public String getLocationReferenceURI();
+}
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/impl/ContentLocRefImpl.java b/spss.server/src/at/gv/egovernment/moa/spss/api/impl/ContentLocRefImpl.java
new file mode 100644
index 000000000..902f7bd72
--- /dev/null
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/impl/ContentLocRefImpl.java
@@ -0,0 +1,44 @@
+package at.gv.egovernment.moa.spss.api.impl;
+
+import at.gv.egovernment.moa.spss.api.common.ContentLocRef;
+
+/**
+ * Default implementation of <code>ContentLocRef</code>.
+ *
+ * @author Gregor Karlinger
+ * @version $Id$
+ */
+public class ContentLocRefImpl extends ContentImpl implements ContentLocRef
+{
+ /**
+ * The location reference URI pointing to the actual remote location of the content.
+ */
+ private String locationReferenceURI_;
+
+ /**
+ * @see at.gv.egovernment.moa.spss.api.common.ContentLocRef#getLocationReference()
+ */
+ public String getLocationReferenceURI()
+ {
+ return locationReferenceURI_;
+ }
+
+ /**
+ * Sets the location reference URI pointing to the actual remote location of the content.
+ *
+ * @param locationReferenceURI the location reference URI.
+ */
+ public void setLocationReferenceURI(String locationReferenceURI)
+ {
+ locationReferenceURI_ = locationReferenceURI;
+ }
+
+ /**
+ * Gets the type of content.
+ *
+ * @return LOCREF_CONTENT.
+ */
+ public int getContentType() {
+ return LOCREF_CONTENT;
+ }
+}
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/impl/SPSSFactoryImpl.java b/spss.server/src/at/gv/egovernment/moa/spss/api/impl/SPSSFactoryImpl.java
index ab6240f79..a953c2af3 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/api/impl/SPSSFactoryImpl.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/impl/SPSSFactoryImpl.java
@@ -439,6 +439,13 @@ public class SPSSFactoryImpl extends SPSSFactory {
return content;
}
+ public Content createContent(String locationReferenceURI, String referenceURI) {
+ ContentLocRefImpl content = new ContentLocRefImpl();
+ content.setLocationReferenceURI(locationReferenceURI);
+ content.setReference(referenceURI);
+ return content;
+ }
+
public Content createContent(String referenceURI) {
ContentReferenceImpl content = new ContentReferenceImpl();
content.setReference(referenceURI);
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/api/xmlbind/RequestParserUtils.java b/spss.server/src/at/gv/egovernment/moa/spss/api/xmlbind/RequestParserUtils.java
index 0fff949b1..a41b14df0 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/api/xmlbind/RequestParserUtils.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/api/xmlbind/RequestParserUtils.java
@@ -34,7 +34,7 @@ public class RequestParserUtils {
private static final String DESCRIPTION_XPATH = MOA + "Description";
private static final String XML_ASSOC_CONTENT_XPATH = MOA + "Content";
private static final String CONTENT_XPATH =
- MOA + "Base64Content | " + MOA + "XMLContent";
+ MOA + "Base64Content | " + MOA + "XMLContent |" + MOA + "LocRefContent";
private static final String ANY_OTHER_XPATH =
"*[namespace-uri() != \"" + Constants.MOA_NS_URI + "\"]";
@@ -101,8 +101,15 @@ public class RequestParserUtils {
return factory.createContent(
Base64Utils.decodeToStream(base64String, true),
referenceURI);
+ } else if ("LocRefContent".equals(contentElem.getLocalName())) {
+ String locationReferenceURI = DOMUtils.getText(contentElem);
+ return factory.createContent(
+ locationReferenceURI,
+ referenceURI);
} else { // "XMLContent".equals(contentElem.getLocalName())
- return factory.createContent(contentElem.getChildNodes(), referenceURI);
+ return factory.createContent(
+ contentElem.getChildNodes(),
+ referenceURI);
}
}
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/invoke/DataObjectFactory.java b/spss.server/src/at/gv/egovernment/moa/spss/server/invoke/DataObjectFactory.java
index 32c81dc07..6f541ed42 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/server/invoke/DataObjectFactory.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/server/invoke/DataObjectFactory.java
@@ -37,6 +37,7 @@ import at.gv.egovernment.moa.spss.MOAApplicationException;
import at.gv.egovernment.moa.spss.MOASystemException;
import at.gv.egovernment.moa.spss.api.common.Content;
import at.gv.egovernment.moa.spss.api.common.ContentBinary;
+import at.gv.egovernment.moa.spss.api.common.ContentLocRef;
import at.gv.egovernment.moa.spss.api.common.ContentXML;
import at.gv.egovernment.moa.spss.api.common.MetaInfo;
import at.gv.egovernment.moa.spss.api.common.XMLDataObjectAssociation;
@@ -54,6 +55,7 @@ import at.gv.egovernment.moa.spss.util.MessageProvider;
* locations of the MOA XML request format.
*
* @author Patrick Peck
+ * @author Gregor Karlinger
* @version $Id$
*/
public class DataObjectFactory {
@@ -128,6 +130,21 @@ public class DataObjectFactory {
contentBytes = StreamUtils.readStream(is);
break;
}
+ case Content.LOCREF_CONTENT:
+ {
+ ExternalURIResolver uriResolver = new ExternalURIResolver();
+ String locRefURI = ((ContentLocRef) content).getLocationReferenceURI();
+ try
+ {
+ InputStream is = uriResolver.resolve(locRefURI);
+ contentBytes = StreamUtils.readStream(is);
+ }
+ catch (MOAApplicationException e)
+ {
+ throw new MOAApplicationException("3203", new Object[]{reference, locRefURI}, e);
+ }
+ break;
+ }
case Content.REFERENCE_CONTENT :
{
ExternalURIResolver uriResolver = new ExternalURIResolver();
@@ -245,7 +262,9 @@ public class DataObjectFactory {
* their reference URI to an <code>InputStream</code> of their respective
* content.
*/
- private static StreamEntityResolver buildSupplementEntityResolver(List supplements) {
+ private static StreamEntityResolver buildSupplementEntityResolver(List supplements)
+ throws MOAApplicationException
+ {
Map entities = new HashMap();
Iterator iter;
@@ -257,31 +276,52 @@ public class DataObjectFactory {
switch (content.getContentType()) {
case Content.BINARY_CONTENT :
- entities.put(reference, ((ContentBinary) content).getBinaryContent());
- break;
+ {
+ entities.put(reference, ((ContentBinary) content).getBinaryContent());
+ break;
+ }
+ case Content.LOCREF_CONTENT:
+ {
+ ExternalURIResolver uriResolver = new ExternalURIResolver();
+ String locRefURI = ((ContentLocRef) content).getLocationReferenceURI();
+ InputStream contentIS = null;
+ try
+ {
+ contentIS = uriResolver.resolve(locRefURI);
+ }
+ catch (MOAApplicationException e)
+ {
+ throw new MOAApplicationException("3202", new Object[]{reference, locRefURI}, e);
+ }
+ entities.put(reference, contentIS);
+ break;
+ }
case Content.XML_CONTENT :
- // serialize the first element node that is found in the supplement
- // and make it available as a stream
- NodeList nodes = ((ContentXML) content).getXMLContent();
- int i = 0;
-
- // find the first element node
- while (i < nodes.getLength()
- && nodes.item(i).getNodeType() != Node.ELEMENT_NODE)
- i++;
-
- // serialize the node
- if (i < nodes.getLength()) {
- try {
- byte[] serialized =
- DOMUtils.serializeNode(nodes.item(i), "UTF-8");
- entities.put(reference, new ByteArrayInputStream(serialized));
- } catch (Exception e) {
- // serializing the element failed - just don't put it in the map
+ {
+ // serialize the first element node that is found in the supplement
+ // and make it available as a stream
+ NodeList nodes = ((ContentXML) content).getXMLContent();
+ int i = 0;
+
+ // find the first element node
+ while (i < nodes.getLength()
+ && nodes.item(i).getNodeType() != Node.ELEMENT_NODE)
+ i++;
+
+ // serialize the node
+ if (i < nodes.getLength()) {
+ try
+ {
+ byte[] serialized = DOMUtils.serializeNode(nodes.item(i), "UTF-8");
+ entities.put(reference, new ByteArrayInputStream(serialized));
+ }
+ catch (Exception e)
+ {
+ throw new MOAApplicationException("2282", new Object[]{reference}, e);
+ }
}
+ break;
}
-
- break;
}
}
@@ -336,22 +376,42 @@ public class DataObjectFactory {
checkAllowContentAndReference(content, allowContentAndReference);
// ok, build the data object; use content first, if available
- switch (content.getContentType()) {
+ switch (content.getContentType())
+ {
case Content.XML_CONTENT :
+ {
ContentXML contentXml = (ContentXML) content;
dataObject = createFromXmlContent(contentXml, xmlAsNodeList);
break;
+ }
case Content.BINARY_CONTENT :
+ {
ContentBinary contentBinary = (ContentBinary) content;
dataObject = createFromBinaryContent(contentBinary, binaryAsXml, false);
break;
+ }
+ case Content.LOCREF_CONTENT :
+ {
+ String locRefURI = ((ContentLocRef) content).getLocationReferenceURI();
+ try
+ {
+ dataObject = createFromURIImpl(locRefURI, referenceAsXml);
+ }
+ catch (MOAApplicationException e)
+ {
+ throw new MOAApplicationException("3201", new Object[]{reference, locRefURI}, e);
+ }
+ break;
+ }
case Content.REFERENCE_CONTENT :
+ {
dataObject = createFromURIImpl(reference, referenceAsXml);
break;
+ }
}
// set URI and reference ID
- dataObject.setURI(content.getReference());
+ dataObject.setURI(reference);
dataObject.setReferenceID(referenceID);
return dataObject;
@@ -417,21 +477,41 @@ public class DataObjectFactory {
String mimeType = metaInfo != null ? metaInfo.getMimeType() : null;
DataObjectImpl dataObject = null;
- switch (content.getContentType()) {
+ switch (content.getContentType())
+ {
case Content.XML_CONTENT :
- if (xmlContentAllowed) {
+ {
+ if (xmlContentAllowed)
+ {
dataObject = createFromXmlContent((ContentXML) content, true);
- } else {
+ }
+ else
+ {
throw new MOAApplicationException("2280", null);
}
break;
+ }
case Content.BINARY_CONTENT :
- dataObject =
- createFromBinaryContent(
- (ContentBinary) content,
- false,
- binaryContentRepeatable);
+ {
+ dataObject = createFromBinaryContent(
+ (ContentBinary) content,
+ false,
+ binaryContentRepeatable);
+ break;
+ }
+ case Content.LOCREF_CONTENT :
+ {
+ String locRefURI = ((ContentLocRef) content).getLocationReferenceURI();
+ try
+ {
+ dataObject = createFromURIImpl(locRefURI, false);
+ }
+ catch (MOAApplicationException e)
+ {
+ throw new MOAApplicationException("3201", new Object[]{content.getReference(), locRefURI}, e);
+ }
break;
+ }
}
dataObject.setURI(content.getReference());
diff --git a/spss.server/src/at/gv/egovernment/moa/spss/server/service/AxisHandler.java b/spss.server/src/at/gv/egovernment/moa/spss/server/service/AxisHandler.java
index 19e5aa9fa..64bbb8dbe 100644
--- a/spss.server/src/at/gv/egovernment/moa/spss/server/service/AxisHandler.java
+++ b/spss.server/src/at/gv/egovernment/moa/spss/server/service/AxisHandler.java
@@ -44,7 +44,7 @@ import at.gv.egovernment.moa.spss.util.MessageProvider;
public class AxisHandler extends BasicHandler {
/** The resource names of the messages to load. */
- private static final String MOA_SPSS_WSDL_RESOURCE_ = "/resources/wsdl/MOA-SPSS-1.1.wsdl";
+ private static final String MOA_SPSS_WSDL_RESOURCE_ = "/resources/wsdl/MOA-SPSS-1.2.wsdl";
/** The property name for accessing the HTTP request. */
private static final String REQUEST_PROPERTY = HTTPConstants.MC_HTTP_SERVLETREQUEST;