Author: ssanjamt
Date: 2007-06-26 16:23:05 +0200 (Tue, 26 Jun 2007)
New Revision: 5433
Added:
trunk/data-model-javabean-impl/src/test/java/no/schibstedsok/searchportal/datamodel/DataModelSerializeTest.java
trunk/data-model-javabean-impl/src/test/resources/core.properties
Modified:
trunk/data-model-api/src/main/java/no/schibstedsok/searchportal/datamodel/generic/DataObject.java
trunk/data-model-javabean-impl/src/main/java/no/schibstedsok/searchportal/datamodel/BeanDataObjectInvocationHandler.java
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Query.java
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitable.java
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitor.java
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/parser/AbstractClause.java
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/token/TokenEvaluationEngine.java
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/NavigationConfig.java
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/SearchConfiguration.java
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/Site.java
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/config/SiteConfiguration.java
Log:
- Exception caught:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at
com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:511)
at
com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
at
org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
at
org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
com.atlassian.jira.rpc.soap.jirasoapservice_v2.JirasoapserviceV2SoapBindingStub.login(JirasoapserviceV2SoapBindingStub.java:5432)
at no.jamtli.jira.JiraClient.run(JiraClient.java:37)
at no.jamtli.jira.JiraClient.main(JiraClient.java:56)
Caused by: sun.security.validator.ValidatorException: PKIX path building
failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at
sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validator.java:218)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
... 23 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable
to find valid certification path to requested target
at
sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
... 29 more
{http://xml.apache.org/axis/}hostname:jules
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
com.atlassian.jira.rpc.soap.jirasoapservice_v2.JirasoapserviceV2SoapBindingStub.login(JirasoapserviceV2SoapBindingStub.java:5432)
at no.jamtli.jira.JiraClient.run(JiraClient.java:37)
at no.jamtli.jira.JiraClient.main(JiraClient.java:56)
Caused by: javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1520)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:182)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:176)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:975)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:123)
at
com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:511)
at
com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:449)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:817)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1029)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1056)
at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1040)
at
org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
at
org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
... 12 more
Caused by: sun.security.validator.ValidatorException: PKIX path building
failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to
find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:285)
at
sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:191)
at sun.security.validator.Validator.validate(Validator.java:218)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at
com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at
com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:954)
... 23 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable
to find valid certification path to requested target
at
sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:280)
... 29 more
Modified:
trunk/data-model-api/src/main/java/no/schibstedsok/searchportal/datamodel/generic/DataObject.java
===================================================================
---
trunk/data-model-api/src/main/java/no/schibstedsok/searchportal/datamodel/generic/DataObject.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/data-model-api/src/main/java/no/schibstedsok/searchportal/datamodel/generic/DataObject.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -8,6 +8,7 @@
package no.schibstedsok.searchportal.datamodel.generic;
+import java.io.Serializable;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
@@ -29,9 +30,15 @@
@Inherited
public @interface DataObject {
- public final class Property{
+ public final class Property implements Serializable {
private final String name;
private final Object value;
+
+ private Property() {
+ name = null;
+ value = null;
+ }
+
public Property(final String name, final Object value){
this.name = name;
this.value = value;
Modified:
trunk/data-model-javabean-impl/src/main/java/no/schibstedsok/searchportal/datamodel/BeanDataObjectInvocationHandler.java
===================================================================
---
trunk/data-model-javabean-impl/src/main/java/no/schibstedsok/searchportal/datamodel/BeanDataObjectInvocationHandler.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/data-model-javabean-impl/src/main/java/no/schibstedsok/searchportal/datamodel/BeanDataObjectInvocationHandler.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -14,10 +14,16 @@
import java.beans.beancontext.BeanContext;
import java.beans.beancontext.BeanContextChild;
import java.beans.beancontext.BeanContextSupport;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -30,6 +36,7 @@
import no.schibstedsok.searchportal.datamodel.access.AccessAllow;
import no.schibstedsok.searchportal.datamodel.access.AccessDisallow;
import no.schibstedsok.searchportal.datamodel.access.ControlLevel;
+import no.schibstedsok.searchportal.datamodel.generic.DataObject;
import no.schibstedsok.searchportal.datamodel.generic.DataObject.Property;
import no.schibstedsok.searchportal.datamodel.generic.MapDataObject;
import no.schibstedsok.searchportal.datamodel.generic.MapDataObjectSupport;
@@ -43,7 +50,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Mck</a>
* @version <tt>$Id$</tt>
*/
-class BeanDataObjectInvocationHandler<T> implements InvocationHandler {
+class BeanDataObjectInvocationHandler<T> implements InvocationHandler,
Serializable {
// Constants -----------------------------------------------------
@@ -59,17 +66,17 @@
// Attributes ----------------------------------------------------
- private final Class<T> implementOf;
- private final Object support;
- private final boolean immutable;
+ private Class<T> implementOf;
+ private Object support;
+ private boolean immutable;
// properties: the only part of this class that be immutable and reused
- protected final List<Property> properties = new
CopyOnWriteArrayList<Property>();
+ protected List<Property> properties = new CopyOnWriteArrayList<Property>();
- protected final BeanContext context;
+ protected BeanContext context;
- private final Map<Method,InvocationTarget> invocationTargetCache = new
ConcurrentHashMap<Method,InvocationTarget>();
- private final Map<Method,Method> supportMethodCache = new
ConcurrentHashMap<Method,Method>();
+ transient private Map<Method,InvocationTarget> invocationTargetCache = new
ConcurrentHashMap<Method,InvocationTarget>();
+ transient private Map<Method,Method> supportMethodCache = new
ConcurrentHashMap<Method,Method>();
// Static --------------------------------------------------------
@@ -114,7 +121,33 @@
// Constructors --------------------------------------------------
+ /** No-arg constructor to support serialization */
+ protected BeanDataObjectInvocationHandler() {
+ implementOf = null;
+ context = new BeanContextSupport();
+ support = new Object();
+ immutable = false;
+ };
+
+ @SuppressWarnings("unchecked")
+ private void readObject(ObjectInputStream stream) throws IOException,
ClassNotFoundException {
+ invocationTargetCache = new
ConcurrentHashMap<Method,InvocationTarget>();
+ supportMethodCache = new ConcurrentHashMap<Method,Method>();
+ implementOf = (Class<T>) stream.readObject();
+ context = (BeanContext) stream.readObject();
+ support = stream.readObject();
+ immutable = stream.readBoolean();
+ properties = (List<Property>) stream.readObject();
+ }
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.writeObject(implementOf);
+ stream.writeObject(context);
+ stream.writeObject(support);
+ stream.writeBoolean(immutable);
+ stream.writeObject(properties);
+ }
+
/** Creates a new instance of ProxyBeanDataObject */
protected BeanDataObjectInvocationHandler(
final Class<T> cls,
Added:
trunk/data-model-javabean-impl/src/test/java/no/schibstedsok/searchportal/datamodel/DataModelSerializeTest.java
===================================================================
---
trunk/data-model-javabean-impl/src/test/java/no/schibstedsok/searchportal/datamodel/DataModelSerializeTest.java
(rev 0)
+++
trunk/data-model-javabean-impl/src/test/java/no/schibstedsok/searchportal/datamodel/DataModelSerializeTest.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -0,0 +1,356 @@
+/*
+ * DataModelSerializeTest.java
+ *
+ * Created on 11-Jun-2007, 13:42:18
+ *
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package no.schibstedsok.searchportal.datamodel;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Set;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Properties;
+import no.schibstedsok.searchportal.datamodel.generic.DataObject;
+import no.schibstedsok.searchportal.datamodel.generic.StringDataObject;
+import no.schibstedsok.searchportal.datamodel.junkyard.JunkYardDataObject;
+import no.schibstedsok.searchportal.datamodel.navigation.NavigationDataObject;
+import no.schibstedsok.searchportal.datamodel.query.QueryDataObject;
+import no.schibstedsok.searchportal.datamodel.request.BrowserDataObject;
+import no.schibstedsok.searchportal.datamodel.request.ParametersDataObject;
+import no.schibstedsok.searchportal.datamodel.search.SearchDataObject;
+import no.schibstedsok.searchportal.datamodel.site.SiteDataObject;
+import no.schibstedsok.searchportal.datamodel.user.UserDataObject;
+import no.schibstedsok.searchportal.mode.NavigationConfig;
+import no.schibstedsok.searchportal.mode.config.SearchConfiguration;
+import no.schibstedsok.searchportal.mode.config.StaticCommandConfig;
+import no.schibstedsok.searchportal.query.Clause;
+import no.schibstedsok.searchportal.query.Query;
+import no.schibstedsok.searchportal.query.Visitor;
+import no.schibstedsok.searchportal.query.finder.ParentFinder;
+import no.schibstedsok.searchportal.query.parser.AbstractQuery;
+import no.schibstedsok.searchportal.query.token.TokenPredicate;
+import no.schibstedsok.searchportal.result.BasicNavigationItem;
+import no.schibstedsok.searchportal.result.BasicResultItem;
+import no.schibstedsok.searchportal.result.BasicResultList;
+import no.schibstedsok.searchportal.result.NavigationItem;
+import no.schibstedsok.searchportal.result.ResultList;
+import no.schibstedsok.searchportal.site.Site;
+import no.schibstedsok.searchportal.site.Site.Context;
+import no.schibstedsok.searchportal.site.SiteContext;
+import no.schibstedsok.searchportal.site.config.FileResourceLoader;
+import no.schibstedsok.searchportal.site.config.PropertiesLoader;
+import no.schibstedsok.searchportal.site.config.SiteConfiguration;
+import no.schibstedsok.searchportal.user.User;
+import org.apache.log4j.Logger;
+import org.testng.annotations.Test;
+
+/**
+ *
+ * @author andersjj
+ */
+public class DataModelSerializeTest implements Serializable {
+
+ private static final Logger LOG =
Logger.getLogger(DataModelSerializeTest.class);
+
+ private static final String JUNK_YARD_KEY = "foo";
+ private static final String JUNK_YARD_VALUE = "bar";
+ private static final int SEARCH_HIT_COUNT = 10;
+ private static final String SEARCH_KEY = "default";
+ private static final String NAVIGATION_TITLE = "navigationTitle";
+ private static final String NAVIGATION_URL = "http://navigationURL";
+ private static final int NAVIGATION_HIT_COUNT = 11;
+ private static final String NAVIGATION_KEY = "navigationKey";
+ private static final String QUERY_STRING = "sesam";
+ private static final String USER_AGENT = "Opera (Linux)";
+ private static final String REMOTE_ADDRESS = "127.0.0.1";
+
+ public DataModelSerializeTest() {
+
+ }
+
+ @Test
+ public void testSerialize() throws Exception {
+ final DataModelFactory factory = new DataModelFactoryImpl(new
DataModelFactory.Context(){
+ public Site getSite() {
+ return Site.DEFAULT;
+ }
+
+ public PropertiesLoader newPropertiesLoader(final SiteContext
siteCxt,
+ final String resource,
+ final Properties properties) {
+ return TestResourceLoader.newPropertiesLoader(siteCxt,
resource, properties);
+ }
+ });
+
+ final DataModel datamodel = factory.instantiate();
+
+ final Site site = getTestingSite();
+
+ final SiteConfiguration.Context cxt = new SiteConfiguration.Context() {
+ public Site getSite() {
+ return site;
+ }
+
+ public PropertiesLoader newPropertiesLoader(
+ final SiteContext siteContext,
+ final String resource,
+ final Properties properties) {
+ return TestResourceLoader.newPropertiesLoader(siteContext,
resource, properties);
+ }
+ };
+
+ final SiteConfiguration siteConfig = SiteConfiguration.valueOf(cxt);
+
+ final SiteDataObject siteDO = factory.instantiate(
+ SiteDataObject.class,
+ new DataObject.Property("site", site),
+ new DataObject.Property("siteconfiguration", siteConfig));
+ datamodel.setSite(siteDO);
+
+ final JunkYardDataObject junkYardDO = factory.instantiate(
+ JunkYardDataObject.class,
+ new DataObject.Property("values", new
Hashtable<String,Object>()));
+ datamodel.setJunkYard(junkYardDO);
+
+ datamodel.getJunkYard().setValue(JUNK_YARD_KEY, JUNK_YARD_VALUE);
+
+ final SearchConfiguration searchConfiguration = new
StaticCommandConfig();
+ final ResultList<BasicResultItem> searchResults = new
BasicResultList<BasicResultItem>();
+ searchResults.setHitCount(SEARCH_HIT_COUNT);
+
+ final Set<TokenPredicate> tokenPredicateSet = new
HashSet<TokenPredicate>();
+ tokenPredicateSet.add(TokenPredicate.FOOD);
+
+ final Clause root = new Clause() {
+
+ public String getTerm() {
+ return QUERY_STRING;
+ }
+
+ public Set<TokenPredicate> getKnownPredicates() {
+ return tokenPredicateSet;
+ }
+
+ public Set<TokenPredicate> getPossiblePredicates() {
+ return tokenPredicateSet;
+ }
+
+ public void accept(Visitor visitor) {
+ }
+ };
+
+ final ParentFinder parentFinder = new ParentFinder();
+
+ final Query query = new AbstractQuery(QUERY_STRING){
+ public Clause getRootClause(){
+ return root;
+ }
+ public ParentFinder getParentFinder(){
+ return parentFinder;
+ }
+ public boolean isBlank(){
+ return false;
+ }
+ };
+
+ final QueryDataObject queryDO = factory.instantiate(
+ QueryDataObject.class,
+ new DataObject.Property("query", query));
+
+ final SearchDataObject searchDO = factory.instantiate(
+ SearchDataObject.class,
+ new DataObject.Property("configuration", searchConfiguration),
+ new DataObject.Property("results", searchResults),
+ new DataObject.Property("query", queryDO));
+ datamodel.setSearch(SEARCH_KEY, searchDO);
+
+ datamodel.setQuery(queryDO);
+
+ final StringDataObject userAgent = factory.instantiate(
+ StringDataObject.class,
+ new DataObject.Property("string", USER_AGENT));
+
+ final StringDataObject remoteAddress = factory.instantiate(
+ StringDataObject.class,
+ new DataObject.Property("string", REMOTE_ADDRESS));
+
+ final BrowserDataObject browserDO = factory.instantiate(
+ BrowserDataObject.class,
+ new DataObject.Property("userAgent", userAgent),
+ new DataObject.Property("remoteAddress", remoteAddress));
+
+ datamodel.setBrowser(browserDO);
+
+ final NavigationConfig navigationConfiguration = new
NavigationConfig();
+ final Map<String,NavigationItem> navigation = new
HashMap<String,NavigationItem>();
+ final NavigationItem navigationItem = new
BasicNavigationItem(NAVIGATION_TITLE, NAVIGATION_URL, NAVIGATION_HIT_COUNT);
+ navigation.put(NAVIGATION_KEY, navigationItem);
+
+ final NavigationDataObject navigationDO = factory.instantiate(
+ NavigationDataObject.class,
+ new DataObject.Property("configuration",
navigationConfiguration),
+ new DataObject.Property("navigations", navigation));
+ datamodel.setNavigation(navigationDO);
+
+ final ParametersDataObject parametersDO = factory.instantiate(
+ ParametersDataObject.class);
+ datamodel.setParameters(parametersDO);
+
+ final User user = new User() {};
+
+ final UserDataObject userDO = factory.instantiate(
+ UserDataObject.class,
+ new DataObject.Property("user", user));
+ datamodel.setUser(userDO);
+
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final ObjectOutputStream os = new ObjectOutputStream(baos);
+
+ LOG.info("Serializing datamodel");
+ os.writeObject(datamodel);
+
+ final ByteArrayInputStream bais = new
ByteArrayInputStream(baos.toByteArray());
+ final ObjectInputStream is = new ObjectInputStream(bais);
+
+ LOG.info("De-serializing datamodel");
+ final DataModel datamodel2 = (DataModel) is.readObject();
+
+ assert datamodel2 != null : "is.readObject() returned NULL";
+ LOG.info("Datamodel: OK");
+
+ final SiteDataObject siteDO2 = datamodel2.getSite();
+ assert siteDO2 != null : "siteDO2 == null";
+
+ final Site site2 = siteDO2.getSite();
+ assert site2 != null : "site2 == null";
+
+ assert site.getName().equals(site2.getName()) : "Expected: '" +
site.getName() + "', got: '" + site2.getName() + "'";
+ assert site.getConfigContext().equals(site2.getConfigContext()) :
"Expected: '" + site.getConfigContext() + "', got: '" + site2.getName() + "'";
+ assert site.getTemplateDir().equals(site2.getTemplateDir()) :
"Expected: '" + site.getTemplateDir() + "', got: '" + site2.getTemplateDir() +
"'";
+
+ LOG.info("Site: OK");
+
+ assert datamodel2.getJunkYard() != null : "getJunkYard() returned
NULL";
+
+ assert datamodel2.getJunkYard() instanceof JunkYardDataObject
+ : "expected getJunkYard() to return instance of
JunkYardObject, instead it returned: "
+ + datamodel2.getJunkYard().toString();
+
+ final JunkYardDataObject junkYardDO2 = datamodel2.getJunkYard();
+
+ assert JUNK_YARD_VALUE.equals(junkYardDO2.getValue(JUNK_YARD_KEY)) :
"Expected: '" + JUNK_YARD_VALUE + "', got: '" +
junkYardDO2.getValue(JUNK_YARD_KEY) + "'";
+ LOG.info("Junk yard: OK");
+
+ assert datamodel2.getSearch(SEARCH_KEY) != null :
"datamodel2.getSearch(\"" + SEARCH_KEY + "\") == null";
+ LOG.info("Search: OK");
+
+ assert datamodel2.getNavigation() != null :
"datamodel2.getNavigation() == null";
+
+ final Map<String,NavigationItem> navigation2 =
datamodel2.getNavigation().getNavigations();
+ assert navigation2.get(NAVIGATION_KEY) != null : "navigation2.get(" +
NAVIGATION_KEY + ") == null";
+
+ final NavigationItem navigationItem2 = navigation2.get(NAVIGATION_KEY);
+ assert navigationItem2.getTitle().equals(NAVIGATION_TITLE) :
"Expected: '" + NAVIGATION_TITLE + "', got: '" + navigationItem2.getTitle() +
"'";
+ assert navigationItem2.getUrl().equals(NAVIGATION_URL) : "Expected: '"
+ NAVIGATION_URL + "', got: '" + navigationItem2.getUrl() + "'";
+ assert navigationItem2.getHitCount() == NAVIGATION_HIT_COUNT :
"Expected: '" + NAVIGATION_HIT_COUNT + "', got: '" +
navigationItem2.getHitCount() + "'";
+
+ LOG.info("Navigation: OK");
+
+ assert datamodel2.getQuery() != null : "datamodel2.getQuery()";
+
+ final Query query2 = datamodel2.getQuery().getQuery();
+ assert query2.getQueryString().equals(QUERY_STRING) : "Expected: '" +
QUERY_STRING + "', got: '" + query2.getQueryString() + "'";
+
+ LOG.info("Query: OK");
+
+ final BrowserDataObject browserDO2 = datamodel2.getBrowser();
+ assert browserDO2 != null : "browserDO2 == null";
+ assert browserDO2.getUserAgent().getString().equals(USER_AGENT) :
"Expected: '" + USER_AGENT + "', got: '" +
browserDO2.getUserAgent().getString();
+
+ LOG.info("Browser: OK");
+
+ final ParametersDataObject parametersDO2 = datamodel2.getParameters();
+ assert parametersDO2 != null : "parametersDO2 == null";
+
+ LOG.info("Parameters: OK");
+
+ final UserDataObject userDO2 = datamodel2.getUser();
+ assert userDO2 != null : "userDO2 == null";
+ LOG.info("User: OK");
+ }
+
+ protected Site.Context getSiteConstructingContext(){
+
+ return new Context(){
+ public String getParentSiteName(final SiteContext siteContext){
+ // we have to do this manually instead of using
SiteConfiguration,
+ // because SiteConfiguration relies on the parent site that
we haven't get initialised.
+ // That is, the PARENT_SITE_KEY property MUST be explicit in
the site's configuration.properties.
+ final Properties props = new Properties();
+ final PropertiesLoader loader
+ = TestResourceLoader.newPropertiesLoader(siteContext,
Site.CONFIGURATION_FILE, props);
+ loader.abut();
+ return props.getProperty(Site.PARENT_SITE_KEY);
+ }
+ };
+ }
+
+ protected Site getTestingSite(){
+
+ final String basedir = "localhost";
+ return Site.valueOf(
+ getSiteConstructingContext(),
+ basedir,
+ Locale.getDefault());
+ }
+
+}
+
+class TestResourceLoader extends FileResourceLoader {
+
+ private static final Logger LOG =
Logger.getLogger(TestResourceLoader.class);
+
+ protected TestResourceLoader(final SiteContext cxt) {
+ super(cxt);
+ }
+
+ public static PropertiesLoader newPropertiesLoader(
+ final SiteContext siteCxt,
+ final String resource,
+ final Properties properties) {
+
+ final PropertiesLoader pl = new TestResourceLoader(siteCxt);
+ return pl;
+ }
+
+ @Override
+ public void init(final String resource, final Properties properties) {}
+
+ private static final Properties props = new Properties();
+ static {
+ props.setProperty(Site.DEFAULT_SITE_LOCALE_KEY, "no");
+ props.setProperty("sesam.datamodel.impl",
"no.schibstedsok.searchportal.datamodel.DataModelFactoryImpl");
+ props.setProperty(Site.DEFAULT_SERVER_PORT_KEY, "0");
+ props.setProperty(Site.DEFAULT_SITE_KEY, "localhost");
+ props.setProperty(Site.PARENT_SITE_KEY, "");
+ }
+
+ @Override
+ public Properties getProperties() {
+ return props;
+ }
+
+ @Override
+ public void abut() {}
+}
Added: trunk/data-model-javabean-impl/src/test/resources/core.properties
===================================================================
--- trunk/data-model-javabean-impl/src/test/resources/core.properties
(rev 0)
+++ trunk/data-model-javabean-impl/src/test/resources/core.properties
2007-06-26 14:23:05 UTC (rev 5433)
@@ -0,0 +1,12 @@
+## These properties are needed beyond the SiteSearch architecture
+## Everything else should be loaded (overrided) from the
search-front-config's configuration.properties
+
+# The server's port. Can be 0 for development.
+server.port=0
+
+# Default Site. See no.schibstedsok.searchportal.site.Site.java
+site.default=generic.sesam
+site.default.locale.default=no
+
+sesam.datamodel.impl=no.schibstedsok.searchportal.datamodel.DataModelFactoryImpl
+
Modified:
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Query.java
===================================================================
--- trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Query.java
2007-06-26 13:53:17 UTC (rev 5432)
+++ trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Query.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -3,6 +3,7 @@
*/
package no.schibstedsok.searchportal.query;
+import java.io.Serializable;
import no.schibstedsok.searchportal.query.finder.ParentFinder;
import no.schibstedsok.searchportal.query.token.TokenEvaluationEngine;
@@ -14,7 +15,7 @@
* @version $Id$
* @author <a href="mailto:[EMAIL PROTECTED]">Michael Semb Wever</a>
*/
-public interface Query {
+public interface Query extends Serializable {
/** The root clause to the clause heirarchy.
* Will always be an operation clause if more than one term exists in the
query.
Modified:
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitable.java
===================================================================
---
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitable.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitable.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -9,6 +9,7 @@
package no.schibstedsok.searchportal.query;
+import java.io.Serializable;
/** Interface for Classes that will implement the Visitor pattern.
* See complimentary Visitor interface.
@@ -16,7 +17,7 @@
* @version $Id$
* @author <a href="mailto:[EMAIL PROTECTED]">Michael Semb Wever</a>
*/
-public interface Visitable {
+public interface Visitable extends Serializable {
/** Method to accept a visitor.
* This method usually doesn't do more than
Modified:
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitor.java
===================================================================
---
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitor.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/Visitor.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -3,13 +3,15 @@
*/
package no.schibstedsok.searchportal.query;
+import java.io.Serializable;
+
/** Interface for Classes that will implement the Visitor pattern.
* See complimentary Visitable interface.
*
* @version $Id$
* @author <a href="mailto:[EMAIL PROTECTED]">Michael Semb Wever</a>
*/
-public interface Visitor {
+public interface Visitor extends Serializable {
/** Method to hold implementation for what the visitor is supposed to do
to the clause object.
*
Modified:
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/parser/AbstractClause.java
===================================================================
---
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/parser/AbstractClause.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/parser/AbstractClause.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -161,10 +161,15 @@
/** You must use <CODE>AbstractClause(String, Set<Predicate>,
Set<Predicate>)</CODE> instead.
* This constructor will throw an IllegalArgumentException.
**/
+// protected AbstractClause() {
+// throw new
IllegalArgumentException(ERR_MUST_ALWAYS_USE_ARGED_CONSTRUCTOR);
+// }
+ /** We need a no-argument constructor for serialization. */
protected AbstractClause() {
- throw new
IllegalArgumentException(ERR_MUST_ALWAYS_USE_ARGED_CONSTRUCTOR);
+ this.term = null;
+ this.knownPredicates = null;
+ this.possiblePredicates = null;
}
-
/**
* Create clause with the given term, known and possible predicates.
* @param term the term (query string) for this clause.
Modified:
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/token/TokenEvaluationEngine.java
===================================================================
---
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/token/TokenEvaluationEngine.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/query-api/src/main/java/no/schibstedsok/searchportal/query/token/TokenEvaluationEngine.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -3,6 +3,7 @@
*/
package no.schibstedsok.searchportal.query.token;
+import java.io.Serializable;
import java.util.Set;
import no.schibstedsok.commons.ioc.BaseContext;
import no.schibstedsok.searchportal.query.Clause;
@@ -31,7 +32,7 @@
public interface Context extends BaseContext, QueryStringContext,
ResourceContext, SiteContext{
}
- public interface State{
+ public interface State extends Serializable {
/** the current clause's term, or null if in query-evaluation mode. **/
String getTerm();
/** the current query, or null if in term-evaluation mode. **/
Modified:
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/NavigationConfig.java
===================================================================
---
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/NavigationConfig.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/NavigationConfig.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -1,5 +1,6 @@
package no.schibstedsok.searchportal.mode;
+import java.io.Serializable;
import no.schibstedsok.searchportal.site.config.AbstractDocumentFactory;
import static
no.schibstedsok.searchportal.site.config.AbstractDocumentFactory.ParseType;
import org.apache.log4j.Logger;
@@ -28,7 +29,7 @@
* @author Geir H. Pettersen(T-Rank)
* @version $Id$
*/
-public final class NavigationConfig{
+public final class NavigationConfig implements Serializable {
private static final Logger LOG = Logger.getLogger(NavigationConfig.class);
Modified:
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/SearchConfiguration.java
===================================================================
---
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/SearchConfiguration.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/search-command-config-spi/src/main/java/no/schibstedsok/searchportal/mode/config/SearchConfiguration.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -4,6 +4,7 @@
*/
package no.schibstedsok.searchportal.mode.config;
+import java.io.Serializable;
import no.schibstedsok.searchportal.query.transform.QueryTransformerConfig;
import no.schibstedsok.searchportal.result.handler.ResultHandlerConfig;
@@ -15,8 +16,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
* @version <tt>$Id$</tt>
*/
-public interface SearchConfiguration {
-
+public interface SearchConfiguration extends Serializable {
/**
* Returns a (defensive copy) list of [EMAIL PROTECTED]
no.schibstedsok.searchportal.query.transform.QueryTransformer} that should be
applied to
* the query before the query is sent to search indices.
Modified:
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/Site.java
===================================================================
--- trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/Site.java
2007-06-26 13:53:17 UTC (rev 5432)
+++ trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/Site.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -10,6 +10,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.Serializable;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
@@ -27,7 +28,7 @@
* @version $Id$
* @author <a href="mailto:[EMAIL PROTECTED]">Michael Semb Wever</a>
*/
-public final class Site {
+public final class Site implements Serializable {
/** Not to be confused with the SiteContext.
* This is a Context required for constructing a Site.
@@ -82,6 +83,15 @@
*/
private final Site parent;
+ /** No-argument constructor for deserialization. */
+ private Site() {
+ siteName = null;
+ cxtName = null;
+ locale = Locale.getDefault();
+ uniqueName = null;
+ parent = null;
+ }
+
/** Creates a new instance of Site.
* A null Context will result in a parentSiteName == siteName
*/
Modified:
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/config/SiteConfiguration.java
===================================================================
---
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/config/SiteConfiguration.java
2007-06-26 13:53:17 UTC (rev 5432)
+++
trunk/site-spi/src/main/java/no/schibstedsok/searchportal/site/config/SiteConfiguration.java
2007-06-26 14:23:05 UTC (rev 5433)
@@ -1,6 +1,7 @@
// Copyright (2006) Schibsted Søk AS
package no.schibstedsok.searchportal.site.config;
+import java.io.Serializable;
import no.schibstedsok.commons.ioc.BaseContext;
import no.schibstedsok.searchportal.site.Site;
import no.schibstedsok.searchportal.site.SiteContext;
@@ -20,7 +21,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Magnus Eklund</a>
* @version $Id$
*/
-public final class SiteConfiguration implements SiteKeyedFactory {
+public final class SiteConfiguration implements SiteKeyedFactory, Serializable
{
public static final String NAME_KEY = "SiteConfiguration";
/**
@@ -47,7 +48,7 @@
public static final String ALLOW_LIST = "site.allow";
public static final String DISALLOW_LIST = "site.disallow";
- public interface Context extends BaseContext, PropertiesContext,
SiteContext {
+ public interface Context extends BaseContext, PropertiesContext,
SiteContext, Serializable {
}
private final Properties properties = new Properties();
@@ -59,6 +60,11 @@
private static final Logger LOG =
Logger.getLogger(SiteConfiguration.class);
+ /** No-argument constructor for deserialization. */
+ private SiteConfiguration() {
+ context = null;
+ }
+
private SiteConfiguration(final Context cxt) {
try {
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits