You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/02/25 18:41:17 UTC
svn commit: r916368 - in /incubator/chemistry/trunk/chemistry: ./
chemistry-api/src/main/java/org/apache/chemistry/ chemistry-atompub-server/
chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/
chemistry-parent/ chemistry-soap-server/ che...
Author: fguillaume
Date: Thu Feb 25 17:41:17 2010
New Revision: 916368
URL: http://svn.apache.org/viewvc?rev=916368&view=rev
Log:
Preliminary SOAP server support
Added:
incubator/chemistry/trunk/chemistry/chemistry-soap-server/ (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java (with props)
incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/resources/
Removed:
incubator/chemistry/trunk/chemistry/chemistry-atompub-server/README.txt
Modified:
incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/RepositoryManager.java
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleRepositoryService.java
incubator/chemistry/trunk/chemistry/chemistry-parent/pom.xml
incubator/chemistry/trunk/chemistry/chemistry-ws/pom.xml
incubator/chemistry/trunk/chemistry/pom.xml
Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/RepositoryManager.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/RepositoryManager.java?rev=916368&r1=916367&r2=916368&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/RepositoryManager.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/RepositoryManager.java Thu Feb 25 17:41:17 2010
@@ -29,8 +29,13 @@
protected static RepositoryManager instance;
+ protected List<Runnable> activators = new ArrayList<Runnable>(1);
+
protected List<RepositoryService> services = new CopyOnWriteArrayList<RepositoryService>();
+ /**
+ * Gets the {@link RepositoryManager} singleton.
+ */
public static RepositoryManager getInstance() {
if (instance == null) {
synchronized (RepositoryManager.class) {
@@ -42,6 +47,32 @@
return instance;
}
+ /**
+ * Registers a {@link Runnable} that will be called the first time a request
+ * for a repository is made.
+ * <p>
+ * This can be used with a runnable that registers repositories just when
+ * they are needed.
+ */
+ public synchronized void registerActivator(Runnable activator) {
+ activators.add(activator);
+ }
+
+ protected void runActivators() {
+ if (activators.isEmpty()) {
+ return;
+ }
+ synchronized (this) {
+ for (Runnable activator : activators) {
+ activator.run();
+ }
+ activators.clear();
+ }
+ }
+
+ /**
+ * Registers a {@link RepositoryService}.
+ */
public synchronized void registerService(RepositoryService service) {
if (service == this) {
// avoid stupid errors
@@ -60,6 +91,7 @@
}
public Repository getDefaultRepository() {
+ runActivators();
for (RepositoryService service : services) {
Repository repository = service.getDefaultRepository();
if (repository != null) {
@@ -70,6 +102,7 @@
}
public Collection<RepositoryEntry> getRepositories() {
+ runActivators();
List<RepositoryEntry> entries = new ArrayList<RepositoryEntry>(1);
for (RepositoryService service : services) {
entries.addAll(service.getRepositories());
@@ -78,6 +111,7 @@
}
public Repository getRepository(String repositoryId) {
+ runActivators();
for (RepositoryService service : services) {
Repository repository = service.getRepository(repositoryId);
if (repository != null) {
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleRepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleRepositoryService.java?rev=916368&r1=916367&r2=916368&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleRepositoryService.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleRepositoryService.java Thu Feb 25 17:41:17 2010
@@ -16,34 +16,55 @@
*/
package org.apache.chemistry.impl.simple;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.List;
import org.apache.chemistry.Repository;
import org.apache.chemistry.RepositoryEntry;
import org.apache.chemistry.RepositoryService;
/**
- * Simple repository service holding one repository instance.
+ * Simple repository service holding one ore more repository instance.
*/
public class SimpleRepositoryService implements RepositoryService {
- protected final Repository repository;
+ private List<Repository> repositories;
+ /**
+ * Service holding one repository.
+ */
public SimpleRepositoryService(Repository repository) {
- this.repository = repository;
+ this.repositories = Collections.singletonList(repository);
+ }
+
+ /**
+ * Service holding one or more repository. The first repository is used as
+ * the default.
+ */
+ public SimpleRepositoryService(List<Repository> repositories) {
+ if (repositories == null || repositories.isEmpty()) {
+ throw new IllegalArgumentException();
+ }
+ this.repositories = new ArrayList<Repository>(repositories);
}
public Repository getDefaultRepository() {
- return repository;
+ return repositories.get(0);
}
public Collection<RepositoryEntry> getRepositories() {
- return Collections.<RepositoryEntry> singleton(repository);
+ return Collections.<RepositoryEntry> unmodifiableCollection(repositories);
}
public Repository getRepository(String repositoryId) {
- return repository.getId().equals(repositoryId) ? repository : null;
+ for (Repository repository : repositories) {
+ if (repository.getId().equals(repositoryId)) {
+ return repository;
+ }
+ }
+ return null;
}
}
Modified: incubator/chemistry/trunk/chemistry/chemistry-parent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-parent/pom.xml?rev=916368&r1=916367&r2=916368&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-parent/pom.xml (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-parent/pom.xml Thu Feb 25 17:41:17 2010
@@ -121,6 +121,16 @@
</dependency>
<dependency>
<groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-ws</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-soap-server</artifactId>
+ <version>${version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.chemistry</groupId>
<artifactId>chemistry-jcr</artifactId>
<version>${version}</version>
</dependency>
@@ -196,6 +206,21 @@
<version>1.0</version>
</dependency>
<dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>2.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jaxws_2.1_spec</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>${cxf.version}</version>
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Feb 25 17:41:17 2010
@@ -0,0 +1,6 @@
+bin
+target
+*.iws
+*.ipr
+*.iml
+.*
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt Thu Feb 25 17:41:17 2010
@@ -0,0 +1,12 @@
+This contains the code for SOAP server bindings to the Chemistry SPI.
+
+In order to have it work correctly, the endpoints have to be registered
+with the SOAP runtime. This is usually done through a WEB-INF/sun-jaxws.xml
+file placed in a WAR. An example such file is available in the examples/
+directory.
+
+In this file, the url-pattern will have to be configured depending on your
+application server.
+
+Note also the <handler-class> directive, which is necessary to have
+authentication be propagated from SOAP to the underlying Chemistry repository.
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/README.txt
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml Thu Feb 25 17:41:17 2010
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
+ <endpoint name="RepositoryService"
+ implementation="org.apache.chemistry.soap.server.RepositoryServicePortImpl"
+ url-pattern="/webservices/cmis/RepositoryService">
+ <handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
+ <handler-chain>
+ <handler>
+ <handler-class>org.apache.chemistry.soap.server.AuthHandler</handler-class>
+ </handler>
+ </handler-chain>
+ </handler-chains>
+ </endpoint>
+</endpoints>
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/examples/sun-jaxws.xml
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml Thu Feb 25 17:41:17 2010
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-parent</artifactId>
+ <version>0.5-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>chemistry-soap-server</artifactId>
+ <name>Chemistry SOAP Server</name>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-commons</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.chemistry</groupId>
+ <artifactId>chemistry-ws</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/pom.xml
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java Thu Feb 25 17:41:17 2010
@@ -0,0 +1,124 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Authors:
+ * Florian Mueller, Open Text
+ * Florent Guillaume, Nuxeo
+ */
+package org.apache.chemistry.soap.server;
+
+import java.util.Collections;
+import java.util.NoSuchElementException;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+
+/**
+ * Extracts a username and password from the WSS UsernameToken of the SOAP
+ * request.
+ * <p>
+ * This information is then stored in a CallContext object of the global
+ * SOAPMessageContext for later retrieval by methods that need it.
+ * <p>
+ * This class should be registered in the handler-chains for each SOAP endpoint.
+ * This often happens in the {@code sun-jaxws.xml} file.
+ */
+public class AuthHandler implements SOAPHandler<SOAPMessageContext> {
+
+ public static final String WSSE_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
+
+ public static final QName WSSE_SECURITY = new QName(WSSE_NS, "Security");
+
+ public static final QName WSSE_USERNAME_TOKEN = new QName(WSSE_NS,
+ "UsernameToken");
+
+ public static final QName WSSE_USERNAME = new QName(WSSE_NS, "Username");
+
+ public static final QName WSSE_PASSWORD = new QName(WSSE_NS, "Password");
+
+ public static final Set<QName> HEADERS = Collections.singleton(WSSE_SECURITY);
+
+ public Set<QName> getHeaders() {
+ return HEADERS;
+ }
+
+ public boolean handleMessage(SOAPMessageContext soapContext) {
+ if (Boolean.TRUE.equals(soapContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {
+ return handleOutboundMessage(soapContext);
+ } else {
+ return handleInboundMessage(soapContext);
+ }
+ }
+
+ protected boolean handleInboundMessage(SOAPMessageContext soapContext) {
+ CallContext callContext = new CallContext();
+ try {
+ extractUsernamePassword(soapContext, callContext);
+ } catch (NoSuchElementException e) {
+ // cannot get UsernameToken
+ callContext.setUsername("");
+ callContext.setPassword("");
+ }
+ callContext.setInMessageContext(soapContext);
+ return true; // continue processing
+ }
+
+ /**
+ * Gets the username and password from the UsernameToken on the
+ * {@link SOAPMessageContext} and stores them in the {@link CallContext}.
+ *
+ * @throws NoSuchElementException if the token cannot be found
+ */
+ protected void extractUsernamePassword(SOAPMessageContext soapContext,
+ CallContext callContext) throws NoSuchElementException {
+ SOAPHeader sh;
+ try {
+ sh = soapContext.getMessage().getSOAPHeader();
+ } catch (SOAPException e) {
+ throw new RuntimeException("Cannot get SOAP header", e);
+ }
+ // NoSuchElementException may be thrown by next()
+ SOAPElement security = (SOAPElement) sh.getChildElements(WSSE_SECURITY).next();
+ SOAPElement token = (SOAPElement) security.getChildElements(
+ WSSE_USERNAME_TOKEN).next();
+ SOAPElement usernameElement = (SOAPElement) token.getChildElements(
+ WSSE_USERNAME).next();
+ SOAPElement passwordElement = (SOAPElement) token.getChildElements(
+ WSSE_PASSWORD).next();
+ String username = usernameElement.getValue();
+ String password = passwordElement.getValue();
+ if (username == null || password == null) {
+ throw new NoSuchElementException();
+ }
+ callContext.setUsername(username);
+ callContext.setPassword(password);
+ }
+
+ protected boolean handleOutboundMessage(SOAPMessageContext soapContext) {
+ return true; // continue processing
+ }
+
+ public boolean handleFault(SOAPMessageContext context) {
+ return true; // continue processing
+ }
+
+ public void close(MessageContext context) {
+ }
+
+}
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/AuthHandler.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java Thu Feb 25 17:41:17 2010
@@ -0,0 +1,93 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Authors:
+ * Florent Guillaume, Nuxeo
+ */
+package org.apache.chemistry.soap.server;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.MessageContext.Scope;
+
+/**
+ * Holds context data about the current call.
+ */
+public class CallContext extends HashMap<String, String> {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String USERNAME = "username";
+
+ public static final String PASSWORD = "password";
+
+ public static final String CALL_CONTEXT = "org.apache.chemistry.callcontext";
+
+ public void setUsername(String username) {
+ put(USERNAME, username);
+ }
+
+ public String getUsername() {
+ return get(USERNAME);
+ }
+
+ public void setPassword(String password) {
+ put(PASSWORD, password);
+ }
+
+ public String getPassword() {
+ return get(PASSWORD);
+ }
+
+ public Map<String, Serializable> toMap() {
+ return new HashMap<String, Serializable>(this);
+ }
+
+ /**
+ * Stores this call context in a {@link MessageContext}.
+ *
+ * @param mcontext the message context in which to store
+ */
+ public void setInMessageContext(MessageContext mcontext) {
+ mcontext.put(CALL_CONTEXT, this);
+ mcontext.setScope(CALL_CONTEXT, Scope.APPLICATION);
+ }
+
+ /**
+ * Retrieves the call context from the {@link MessageContext}.
+ *
+ * @param messageContext the message context
+ * @return the call context
+ */
+ public static CallContext fromMessageContext(MessageContext messageContext) {
+ CallContext callContext = (CallContext) messageContext.get(CALL_CONTEXT);
+ if (callContext == null) {
+ callContext = new CallContext();
+ // Principal principal = context.getUserPrincipal();
+ // if (principal != null) {
+ // callContext.setUsername(principal.getName());
+ // }
+ }
+ return callContext;
+ }
+
+ public static Map<String, Serializable> mapFromWebServiceContext(
+ WebServiceContext wscontext) {
+ return CallContext.fromMessageContext(wscontext.getMessageContext()).toMap();
+ }
+
+}
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/CallContext.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java Thu Feb 25 17:41:17 2010
@@ -0,0 +1,213 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Authors:
+ * Florent Guillaume, Nuxeo
+ */
+package org.apache.chemistry.soap.server;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.List;
+import java.util.Map.Entry;
+
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+import org.apache.chemistry.CapabilityJoin;
+import org.apache.chemistry.CapabilityQuery;
+import org.apache.chemistry.ObjectEntry;
+import org.apache.chemistry.Property;
+import org.apache.chemistry.PropertyType;
+import org.apache.chemistry.ws.CmisObjectType;
+import org.apache.chemistry.ws.CmisPropertiesType;
+import org.apache.chemistry.ws.CmisProperty;
+import org.apache.chemistry.ws.CmisPropertyBoolean;
+import org.apache.chemistry.ws.CmisPropertyDateTime;
+import org.apache.chemistry.ws.CmisPropertyDecimal;
+import org.apache.chemistry.ws.CmisPropertyHtml;
+import org.apache.chemistry.ws.CmisPropertyId;
+import org.apache.chemistry.ws.CmisPropertyInteger;
+import org.apache.chemistry.ws.CmisPropertyString;
+import org.apache.chemistry.ws.CmisPropertyUri;
+import org.apache.chemistry.ws.EnumCapabilityJoin;
+import org.apache.chemistry.ws.EnumCapabilityQuery;
+
+/**
+ * Helper for various Chemistry to JAXB conversions.
+ */
+public class ChemistryHelper {
+
+ private ChemistryHelper() {
+ // utility class;
+ }
+
+ public static EnumCapabilityQuery chemistryToJAXB(CapabilityQuery query) {
+ switch (query) {
+ case NONE:
+ return EnumCapabilityQuery.NONE;
+ case METADATA_ONLY:
+ return EnumCapabilityQuery.METADATAONLY;
+ case FULL_TEXT_ONLY:
+ return EnumCapabilityQuery.FULLTEXTONLY;
+ case BOTH_COMBINED:
+ return EnumCapabilityQuery.BOTHCOMBINED;
+ case BOTH_SEPARATE:
+ return EnumCapabilityQuery.BOTHSEPARATE;
+ default:
+ throw new RuntimeException();
+ }
+ }
+
+ public static EnumCapabilityJoin chemistryToJAXB(CapabilityJoin join) {
+ switch (join) {
+ case NONE:
+ return EnumCapabilityJoin.NONE;
+ case INNER_ONLY:
+ return EnumCapabilityJoin.INNERONLY;
+ case INNER_AND_OUTER:
+ return EnumCapabilityJoin.INNERANDOUTER;
+ default:
+ throw new RuntimeException();
+ }
+ }
+
+ public static void chemistryToJAXB(ObjectEntry entry, CmisObjectType object) {
+ CmisPropertiesType properties = new CmisPropertiesType();
+ List<CmisProperty> list = properties.getProperty();
+ for (Entry<String, Serializable> e : entry.getValues().entrySet()) {
+ list.add(getWSCmisProperty(e.getKey(), e.getValue()));
+ }
+ object.setProperties(properties);
+ // object.setAllowableActions(null);
+ }
+
+ /**
+ * Transforms a Chemistry property into a WS one.
+ */
+ public static CmisProperty getWSCmisProperty(String key, Serializable value) {
+ CmisProperty p;
+ PropertyType propertyType = guessType(key, value);
+ // boolean multi = false; // TODO
+ switch (propertyType.ordinal()) {
+ case PropertyType.STRING_ORD:
+ p = new CmisPropertyString();
+ ((CmisPropertyString) p).getValue().add((String) value);
+ break;
+ case PropertyType.DECIMAL_ORD:
+ p = new CmisPropertyDecimal();
+ ((CmisPropertyDecimal) p).getValue().add((BigDecimal) value);
+ break;
+ case PropertyType.INTEGER_ORD:
+ p = new CmisPropertyInteger();
+ Long l;
+ if (value == null) {
+ l = null;
+ } else if (value instanceof Long) {
+ l = (Long) value;
+ } else if (value instanceof Integer) {
+ l = Long.valueOf(((Integer) value).longValue());
+ } else {
+ throw new AssertionError("not a int/long: " + value);
+ }
+ ((CmisPropertyInteger) p).getValue().add(
+ l == null ? null : BigInteger.valueOf(l.longValue()));
+ break;
+ case PropertyType.BOOLEAN_ORD:
+ p = new CmisPropertyBoolean();
+ ((CmisPropertyBoolean) p).getValue().add((Boolean) value);
+ break;
+ case PropertyType.DATETIME_ORD:
+ p = new CmisPropertyDateTime();
+ ((CmisPropertyDateTime) p).getValue().add(
+ getXMLGregorianCalendar((Calendar) value));
+ break;
+ case PropertyType.URI_ORD:
+ p = new CmisPropertyUri();
+ URI u = (URI) value;
+ ((CmisPropertyUri) p).getValue().add(
+ u == null ? null : u.toString());
+ break;
+ case PropertyType.ID_ORD:
+ p = new CmisPropertyId();
+ ((CmisPropertyId) p).getValue().add((String) value);
+ break;
+ case PropertyType.HTML_ORD:
+ p = new CmisPropertyHtml();
+ // ((CmisPropertyHtml)property).getAny().add(element);
+ break;
+ default:
+ throw new AssertionError();
+ }
+ p.setPropertyDefinitionId(key);
+ return p;
+
+ }
+
+ // TODO XXX we shouldn't guess, values should be typed in ObjectEntry
+ protected static PropertyType guessType(String key, Serializable value) {
+ for (String n : Arrays.asList( //
+ Property.ID, //
+ Property.TYPE_ID, //
+ Property.BASE_TYPE_ID, //
+ Property.VERSION_SERIES_ID, //
+ Property.VERSION_SERIES_CHECKED_OUT_ID, //
+ Property.PARENT_ID, //
+ Property.SOURCE_ID, //
+ Property.TARGET_ID)) {
+ if (key.toUpperCase().endsWith(n.toUpperCase())) {
+ return PropertyType.ID;
+ }
+ }
+ if (value instanceof String) {
+ return PropertyType.STRING;
+ }
+ if (value instanceof BigDecimal) {
+ return PropertyType.DECIMAL;
+ }
+ if (value instanceof Number) {
+ return PropertyType.INTEGER;
+ }
+ if (value instanceof Boolean) {
+ return PropertyType.BOOLEAN;
+ }
+ if (value instanceof Calendar) {
+ return PropertyType.DATETIME;
+ }
+ return PropertyType.STRING;
+ }
+
+ protected static DatatypeFactory datatypeFactory;
+
+ protected static XMLGregorianCalendar getXMLGregorianCalendar(
+ Calendar calendar) {
+ if (calendar == null) {
+ return null;
+ }
+ if (datatypeFactory == null) {
+ try {
+ datatypeFactory = DatatypeFactory.newInstance();
+ } catch (DatatypeConfigurationException e) {
+ throw new java.lang.RuntimeException(e);
+ }
+ }
+ return datatypeFactory.newXMLGregorianCalendar((GregorianCalendar) calendar);
+ }
+
+}
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/ChemistryHelper.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java Thu Feb 25 17:41:17 2010
@@ -0,0 +1,131 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Authors:
+ * Florent Guillaume, Nuxeo
+ */
+package org.apache.chemistry.soap.server;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.jws.WebService;
+import javax.xml.bind.JAXBElement;
+import javax.xml.ws.Holder;
+import javax.xml.ws.WebServiceContext;
+
+import org.apache.chemistry.Inclusion;
+import org.apache.chemistry.ListPage;
+import org.apache.chemistry.ObjectEntry;
+import org.apache.chemistry.Paging;
+import org.apache.chemistry.RelationshipDirection;
+import org.apache.chemistry.Repository;
+import org.apache.chemistry.RepositoryManager;
+import org.apache.chemistry.SPI;
+import org.apache.chemistry.ws.CmisException;
+import org.apache.chemistry.ws.CmisExtensionType;
+import org.apache.chemistry.ws.CmisObjectListType;
+import org.apache.chemistry.ws.CmisObjectType;
+import org.apache.chemistry.ws.DiscoveryServicePort;
+import org.apache.chemistry.ws.EnumIncludeRelationships;
+import org.apache.chemistry.ws.Query;
+import org.apache.chemistry.ws.QueryResponse;
+
+@WebService(name = "DiscoveryServicePort", //
+targetNamespace = "http://docs.oasis-open.org/ns/cmis/ws/200908/", //
+serviceName = "DiscoveryService", //
+portName = "DiscoveryServicePort", //
+endpointInterface = "org.apache.chemistry.ws.DiscoveryServicePort")
+public class DiscoveryServicePortImpl implements DiscoveryServicePort {
+
+ @Resource
+ WebServiceContext wscontext;
+
+ public QueryResponse query(Query parameters) throws CmisException {
+ // repository
+ String repositoryId = parameters.getRepositoryId();
+ Repository repository = RepositoryManager.getInstance().getRepository(
+ repositoryId);
+ if (repository == null) {
+ return null; // TODO fault
+ }
+
+ // parameters
+ String statement = parameters.getStatement();
+ JAXBElement<Boolean> searchAllVersionsB = parameters.getSearchAllVersions();
+ boolean searchAllVersions = searchAllVersionsB == null ? false
+ : searchAllVersionsB.getValue().booleanValue();
+
+ JAXBElement<BigInteger> maxItemsBI = parameters.getMaxItems();
+ int maxItems = maxItemsBI == null || maxItemsBI.getValue() == null
+ || maxItemsBI.getValue().intValue() < 0 ? 0
+ : maxItemsBI.getValue().intValue();
+ JAXBElement<BigInteger> skipCountBI = parameters.getSkipCount();
+ int skipCount = skipCountBI == null || skipCountBI.getValue() == null
+ || skipCountBI.getValue().intValue() < 0 ? 0
+ : skipCountBI.getValue().intValue();
+ Paging paging = new Paging(maxItems, skipCount);
+
+ JAXBElement<Boolean> includeAllowableActions = parameters.getIncludeAllowableActions();
+ boolean allowableActions = includeAllowableActions == null
+ || includeAllowableActions.getValue() == null ? false
+ : includeAllowableActions.getValue().booleanValue();
+ JAXBElement<EnumIncludeRelationships> includeRelationships = parameters.getIncludeRelationships();
+ RelationshipDirection relationships = includeRelationships == null
+ || includeRelationships.getValue() == null ? null
+ : RelationshipDirection.fromInclusion(includeRelationships.getValue().name());
+ JAXBElement<String> renditionFilter = parameters.getRenditionFilter();
+ String renditions = renditionFilter == null
+ || renditionFilter.getValue() == null ? null
+ : renditionFilter.getValue();
+ Inclusion inclusion = new Inclusion(null, renditions, relationships,
+ allowableActions, false, false);
+
+ // response
+ QueryResponse response = new QueryResponse();
+ CmisObjectListType objects = new CmisObjectListType();
+ response.setObjects(objects);
+
+ Map<String, Serializable> params = CallContext.mapFromWebServiceContext(wscontext);
+ SPI spi = repository.getSPI(params);
+ try {
+ ListPage<ObjectEntry> res = spi.query(statement, searchAllVersions,
+ inclusion, paging);
+ objects.setHasMoreItems(res.getHasMoreItems());
+ objects.setNumItems(BigInteger.valueOf(res.getNumItems()));
+ List<CmisObjectType> objectList = objects.getObjects();
+ for (ObjectEntry entry : res) {
+ CmisObjectType object = new CmisObjectType();
+ ChemistryHelper.chemistryToJAXB(entry, object);
+ objectList.add(object);
+ }
+ } finally {
+ spi.close();
+ }
+
+ return response;
+ }
+
+ public void getContentChanges(String repositoryId,
+ Holder<String> changeLogToken, Boolean includeProperties,
+ String filter, Boolean includePolicyIds, Boolean includeACL,
+ BigInteger maxItems, CmisExtensionType extension,
+ Holder<CmisObjectListType> objects) throws CmisException {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException();
+ }
+
+}
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/DiscoveryServicePortImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java?rev=916368&view=auto
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java (added)
+++ incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java Thu Feb 25 17:41:17 2010
@@ -0,0 +1,118 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Authors:
+ * Florent Guillaume, Nuxeo
+ */
+package org.apache.chemistry.soap.server;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.jws.WebService;
+
+import org.apache.chemistry.Repository;
+import org.apache.chemistry.RepositoryCapabilities;
+import org.apache.chemistry.RepositoryEntry;
+import org.apache.chemistry.RepositoryInfo;
+import org.apache.chemistry.RepositoryManager;
+import org.apache.chemistry.ws.CmisException;
+import org.apache.chemistry.ws.CmisExtensionType;
+import org.apache.chemistry.ws.CmisRepositoryCapabilitiesType;
+import org.apache.chemistry.ws.CmisRepositoryEntryType;
+import org.apache.chemistry.ws.CmisRepositoryInfoType;
+import org.apache.chemistry.ws.CmisTypeContainer;
+import org.apache.chemistry.ws.CmisTypeDefinitionListType;
+import org.apache.chemistry.ws.CmisTypeDefinitionType;
+import org.apache.chemistry.ws.RepositoryServicePort;
+
+@WebService(name = "RepositoryServicePort", //
+targetNamespace = "http://docs.oasis-open.org/ns/cmis/ws/200908/", //
+serviceName = "RepositoryService", //
+portName = "RepositoryServicePort", //
+endpointInterface = "org.apache.chemistry.ws.RepositoryServicePort")
+public class RepositoryServicePortImpl implements RepositoryServicePort {
+
+ public List<CmisRepositoryEntryType> getRepositories(
+ CmisExtensionType extension) throws CmisException {
+ Collection<RepositoryEntry> repos = RepositoryManager.getInstance().getRepositories();
+ List<CmisRepositoryEntryType> entries = new ArrayList<CmisRepositoryEntryType>(
+ repos.size());
+ for (RepositoryEntry repo : repos) {
+ CmisRepositoryEntryType entry = new CmisRepositoryEntryType();
+ entry.setRepositoryId(repo.getId());
+ entry.setRepositoryName(repo.getName());
+ entries.add(entry);
+ }
+ return entries;
+ }
+
+ public CmisRepositoryInfoType getRepositoryInfo(String repositoryId,
+ CmisExtensionType extension) throws CmisException {
+ Repository repo = RepositoryManager.getInstance().getRepository(
+ repositoryId);
+ if (repo == null) {
+ return null; // TODO or fault?
+ }
+ RepositoryInfo info = repo.getInfo();
+ RepositoryCapabilities cap = info.getCapabilities();
+
+ CmisRepositoryInfoType repositoryInfo = new CmisRepositoryInfoType();
+ repositoryInfo.setRepositoryId(info.getId());
+ repositoryInfo.setRepositoryName(info.getName());
+ repositoryInfo.setRepositoryDescription(info.getDescription());
+ repositoryInfo.setVendorName(info.getVendorName());
+ repositoryInfo.setProductName(info.getProductName());
+ repositoryInfo.setProductVersion(info.getProductVersion());
+ repositoryInfo.setCmisVersionSupported(info.getVersionSupported());
+ repositoryInfo.setRootFolderId(info.getRootFolderId().getId());
+
+ CmisRepositoryCapabilitiesType capabilities = new CmisRepositoryCapabilitiesType();
+ repositoryInfo.setCapabilities(capabilities);
+ capabilities.setCapabilityMultifiling(cap.hasMultifiling());
+ capabilities.setCapabilityUnfiling(cap.hasUnfiling());
+ capabilities.setCapabilityVersionSpecificFiling(cap.hasVersionSpecificFiling());
+ capabilities.setCapabilityPWCUpdatable(cap.isPWCUpdatable());
+ capabilities.setCapabilityPWCSearchable(cap.isPWCSearchable());
+ capabilities.setCapabilityAllVersionsSearchable(cap.isAllVersionsSearchable());
+ capabilities.setCapabilityQuery(ChemistryHelper.chemistryToJAXB(cap.getQueryCapability()));
+ capabilities.setCapabilityJoin(ChemistryHelper.chemistryToJAXB(cap.getJoinCapability()));
+
+ return repositoryInfo;
+ }
+
+ public CmisTypeDefinitionType getTypeDefinition(String repositoryId,
+ String typeId, CmisExtensionType extension) throws CmisException {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException();
+ }
+
+ public CmisTypeDefinitionListType getTypeChildren(String repositoryId,
+ String typeId, Boolean includePropertyDefinitions,
+ BigInteger maxItems, BigInteger skipCount,
+ CmisExtensionType extension) throws CmisException {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException();
+ }
+
+ public List<CmisTypeContainer> getTypeDescendants(String repositoryId,
+ String typeId, BigInteger depth,
+ Boolean includePropertyDefinitions, CmisExtensionType extension)
+ throws CmisException {
+ // TODO Auto-generated method stub
+ throw new UnsupportedOperationException();
+ }
+
+}
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/chemistry/trunk/chemistry/chemistry-soap-server/src/main/java/org/apache/chemistry/soap/server/RepositoryServicePortImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/chemistry/trunk/chemistry/chemistry-ws/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-ws/pom.xml?rev=916368&r1=916367&r2=916368&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-ws/pom.xml (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-ws/pom.xml Thu Feb 25 17:41:17 2010
@@ -32,22 +32,18 @@
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
- <version>2.1</version>
<!--scope>runtime</scope-->
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-jaxws_2.1_spec</artifactId>
- <version>1.0</version>
<!--scope>runtime</scope-->
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
- <version>1.1.2</version>
<!--scope>runtime</scope-->
</dependency>
-
</dependencies>
<build>
Modified: incubator/chemistry/trunk/chemistry/pom.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/pom.xml?rev=916368&r1=916367&r2=916368&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/pom.xml (original)
+++ incubator/chemistry/trunk/chemistry/pom.xml Thu Feb 25 17:41:17 2010
@@ -38,6 +38,7 @@
<module>chemistry-atompub-server</module>
<module>chemistry-atompub-client</module>
<module>chemistry-ws</module>
+ <module>chemistry-soap-server</module>
<module>chemistry-jcr</module>
<module>chemistry-tck-atompub</module>
<module>chemistry-shell</module>