Author: ieb
Date: Fri Aug 12 11:57:57 2016
New Revision: 1756168

URL: http://svn.apache.org/viewvc?rev=1756168&view=rev
Log:
SLING-5948 Support Streaming - Added unit test coverage and tested in launchpad

Added:
    
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java
   (with props)
    
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java
   (with props)
    
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java
   (with props)
    
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java
   (with props)
Modified:
    
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/StreamedUploadOperation.java
    sling/trunk/launchpad/builder/src/main/provisioning/sling.txt

Modified: 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/StreamedUploadOperation.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/StreamedUploadOperation.java?rev=1756168&r1=1756167&r2=1756168&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/StreamedUploadOperation.java
 (original)
+++ 
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/impl/operations/StreamedUploadOperation.java
 Fri Aug 12 11:57:57 2016
@@ -58,14 +58,16 @@ import java.util.Map;
 public class StreamedUploadOperation extends AbstractPostOperation {
     private static final Logger LOG = 
LoggerFactory.getLogger(StreamedUploadOperation.class);
     public static final String NT_FILE = "nt:file";
+    public static final String NT_RESOURCE = "nt:resource";
     public static final String JCR_LASTMODIFIED = "jcr:lastModified";
     public static final String JCR_MIMETYPE = "jcr:mimeType";
     public static final String JCR_DATA = "jcr:data";
     private static final String MT_APP_OCTET = "application/octet-stream";
+    private static final String JCR_CONTENT = "jcr:content";
     private ServletContext servletContext;
 
     public void setServletContext(final ServletContext servletContext) {
-        this.setServletContext(servletContext);
+        this.servletContext = servletContext;
     }
 
 
@@ -132,30 +134,40 @@ public class StreamedUploadOperation ext
         if ( !resourceExists(parentResource)) {
             throw new IllegalArgumentException("Parent resource must already 
exist to be able to stream upload content. Please create first ");
         }
-        final Map<String, Object> props = new HashMap<String, Object>();
-        props.put("sling:resourceType", NT_FILE);
+        String name = getUploadName(part);
+        Resource fileResource = parentResource.getChild(name);
+        Map<String, Object> fileProps = new HashMap<String, Object>();
+        if (fileResource == null) {
+            fileProps.put("jcr:primaryType", NT_FILE);
+            fileResource = 
parentResource.getResourceResolver().create(parentResource, name, fileProps);
+        }
+
+
+
+        Map<String, Object> resourceProps = new HashMap<String, Object>();
+        resourceProps.put("jcr:primaryType", NT_RESOURCE);
+        resourceProps.put(JCR_LASTMODIFIED, Calendar.getInstance());
         // TODO: Should all the formFields be added to the prop map ?
-        props.put(JCR_LASTMODIFIED, Calendar.getInstance());
-        props.put(JCR_MIMETYPE, getContentType(part));
+        resourceProps.put(JCR_MIMETYPE, getContentType(part));
         try {
-            props.put(JCR_DATA, part.getInputStream());
-        } catch (final IOException e) {
+            resourceProps.put(JCR_DATA, part.getInputStream());
+        } catch (IOException e) {
             throw new PersistenceException("Error while retrieving inputstream 
from request part.", e);
         }
-
-        String name = getUploadName(part);
-        // get or create resource
-        Resource result = parentResource.getChild(name);
+        Resource result = fileResource.getChild(JCR_CONTENT);
         if ( result != null ) {
             final ModifiableValueMap vm = 
result.adaptTo(ModifiableValueMap.class);
             if ( vm == null ) {
-                throw new PersistenceException("Resource at " + 
parentResource.getPath() + '/' + name + " is not modifiable.");
+                throw new PersistenceException("Resource at " + 
fileResource.getPath() + '/' + JCR_CONTENT + " is not modifiable.");
             }
-            vm.putAll(props);
+            vm.putAll(resourceProps);
         } else {
-            result = 
parentResource.getResourceResolver().create(parentResource, name, props);
+            result = parentResource.getResourceResolver().create(fileResource, 
JCR_CONTENT, resourceProps);
         }
-        for(final String key : props.keySet()) {
+        // Commit must be called to perform to cause streaming so the next 
part can be found.
+        result.getResourceResolver().commit();
+
+        for( String key : resourceProps.keySet()) {
             changes.add(Modification.onModified(result.getPath() + '/' + key));
         }
     }

Added: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java?rev=1756168&view=auto
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java
 (added)
+++ 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java
 Fri Aug 12 11:57:57 2016
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.sling.servlets.post.impl.operations;
+
+import javax.servlet.http.Part;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Map;
+
+public class MockPart implements Part {
+
+    private Map<String, Object> headers;
+    private long size;
+    private String submittedFileName;
+    private String name;
+    private String contentType;
+    private InputStream inputStream;
+
+    public MockPart(String name, String contentType, String submittedFileName, 
long size, InputStream inputStream) {
+        this.name = name;
+        this.contentType = contentType;
+        this.submittedFileName = submittedFileName;
+        this.size = size;
+        this.inputStream = inputStream;
+    }
+
+    @Override
+    public InputStream getInputStream() throws IOException {
+
+        return inputStream;
+    }
+
+    @Override
+    public String getContentType() {
+        return contentType;
+    }
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String getSubmittedFileName() {
+        return submittedFileName;
+    }
+
+    @Override
+    public long getSize() {
+        return size;
+    }
+
+    @Override
+    public void write(String s) throws IOException {
+        throw new UnsupportedOperationException("Writing a part to disk is not 
supported.");
+
+    }
+
+    @Override
+    public void delete() throws IOException {
+
+    }
+
+    @Override
+    public String getHeader(String s) {
+        return (String) headers.get(s);
+    }
+
+    @Override
+    public Collection<String> getHeaders(String s) {
+        return (Collection<String>) headers.get(s);
+    }
+
+    @Override
+    public Collection<String> getHeaderNames() {
+        return headers.keySet();
+    }
+}

Propchange: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockPart.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java?rev=1756168&view=auto
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java
 (added)
+++ 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java
 Fri Aug 12 11:57:57 2016
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.sling.servlets.post.impl.operations;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * MockResource is synthetic, which doesnt work here.
+ */
+public class MockRealResource implements Resource {
+    private final ResourceResolver resourceResolver;
+    private final String path;
+    private final String resourceType;
+    private MockValueMap properties = new MockValueMap();
+
+    public MockRealResource(ResourceResolver resourceResolver, String path, 
String resourceType) {
+        this.resourceResolver = resourceResolver;
+        this.path = path;
+        this.resourceType = resourceType;
+    }
+
+    public MockRealResource(ResourceResolver resourceResolver, String path, 
String resourceType, Map<String, Object> properties) {
+        this.resourceResolver = resourceResolver;
+        this.path = path;
+        this.resourceType = resourceType;
+        this.properties.putAll(properties);
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public Resource getParent() {
+        return null;
+    }
+
+    @Override
+    public Iterator<Resource> listChildren() {
+        return null;
+    }
+
+    @Override
+    public Iterable<Resource> getChildren() {
+        return null;
+    }
+
+    @Override
+    public Resource getChild(String s) {
+        return resourceResolver.getResource(path +"/"+ s);
+    }
+
+    @Override
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    @Override
+    public String getResourceSuperType() {
+        return null;
+    }
+
+    @Override
+    public boolean isResourceType(String s) {
+        return false;
+    }
+
+    @Override
+    public ResourceMetadata getResourceMetadata() {
+        return null;
+    }
+
+    @Override
+    public ResourceResolver getResourceResolver() {
+        return resourceResolver;
+    }
+
+    @Override
+    public <AdapterType> AdapterType adaptTo(Class<AdapterType> aClass) {
+        if (ValueMap.class.isAssignableFrom(aClass)) {
+            return (AdapterType) properties;
+        }
+        return null;
+    }
+}

Propchange: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockRealResource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java?rev=1756168&view=auto
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java
 (added)
+++ 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java
 Fri Aug 12 11:57:57 2016
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+package org.apache.sling.servlets.post.impl.operations;
+
+import org.apache.sling.api.resource.ModifiableValueMap;
+
+import java.util.HashMap;
+
+/**
+ * Created by ieb on 10/08/2016.
+ */
+public class MockValueMap extends HashMap<String, Object> implements 
ModifiableValueMap {
+    public MockValueMap() {
+    }
+
+    @Override
+    public <T> T get(String s, Class<T> aClass) {
+        return (T) super.get(s);
+    }
+
+    @Override
+    public <T> T get(String s, T t) {
+        return (T) super.get(s);
+    }
+}

Propchange: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/MockValueMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java?rev=1756168&view=auto
==============================================================================
--- 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java
 (added)
+++ 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java
 Fri Aug 12 11:57:57 2016
@@ -0,0 +1,247 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+package org.apache.sling.servlets.post.impl.operations;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.commons.testing.sling.MockResourceResolver;
+import org.apache.sling.servlets.post.AbstractPostResponse;
+import org.apache.sling.servlets.post.Modification;
+import org.apache.sling.servlets.post.PostResponse;
+import org.apache.sling.servlets.post.impl.helper.MockSlingHttpServlet3Request;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.RepositoryException;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by ieb on 10/08/2016.
+ */
+
+public class StreamingUploadOperationTest {
+
+    private static final Logger LOG = 
LoggerFactory.getLogger(StreamingUploadOperationTest.class);
+    private StreamedUploadOperation streamedUplodOperation;
+
+    @Before
+    public void before() {
+        streamedUplodOperation = new StreamedUploadOperation();
+
+    }
+
+    @After
+    public void after() {
+
+    }
+
+    @Test
+    public void test() throws RepositoryException, 
UnsupportedEncodingException {
+        List<Modification> changes = new ArrayList<Modification>();
+        PostResponse ressponse = new AbstractPostResponse() {
+            @Override
+            protected void doSend(HttpServletResponse response) throws 
IOException {
+
+            }
+
+            @Override
+            public void onChange(String type, String... arguments) {
+
+            }
+
+            @Override
+            public String getPath() {
+                return "/test/upload/location";
+            }
+        };
+
+        List<Part> partsList = new ArrayList<Part>();
+        partsList.add(new MockPart("formfield1", null, null, 0, new 
ByteArrayInputStream("testformfield1".getBytes("UTF-8"))));
+        partsList.add(new MockPart("formfield2", null, null, 0, new 
ByteArrayInputStream("testformfield2".getBytes("UTF-8"))));
+        partsList.add(new MockPart("body1", "text/plain", "test1.txt", 4, new 
ByteArrayInputStream("test".getBytes("UTF-8"))));
+        partsList.add(new MockPart("body2", "text/plain2", "test2.txt", 8, new 
ByteArrayInputStream("test1234".getBytes("UTF-8"))));
+        partsList.add(new MockPart("badformfield2", null, null, 0, new 
ByteArrayInputStream("testbadformfield2".getBytes("UTF-8"))));
+        final Iterator<Part> partsIterator = partsList.iterator();
+        final Map<String, Resource> repository = new HashMap<String, 
Resource>();
+        final ResourceResolver resourceResolver = new MockResourceResolver() {
+            @Override
+            public Resource getResource(String path) {
+
+                Resource resource = repository.get(path);
+
+                if ( resource == null ) {
+                    if ( "/test/upload/location".equals(path)) {
+                        resource =  new MockRealResource(this, path, 
"sling:Folder");
+                        repository.put(path,resource);
+                        LOG.debug("Created {} ", path);
+
+                    }
+                }
+                LOG.debug("Resource {} is {} {}", path, resource, 
ResourceUtil.isSyntheticResource(resource));
+                return resource;
+            }
+
+
+
+
+            @Override
+            public Iterable<Resource> getChildren(Resource resource) {
+                return null;
+            }
+
+            @Override
+            public void delete(Resource resource) throws PersistenceException {
+
+            }
+
+            @Override
+            public Resource create(Resource resource, String s, Map<String, 
Object> map) throws PersistenceException {
+                Resource childResource = resource.getChild(s);
+                if ( childResource != null) {
+                    throw new IllegalArgumentException("Child "+s+" already 
exists ");
+                }
+                Resource newResource = new MockRealResource(this, 
resource.getPath()+"/"+s, (String)map.get("sling:resourceType"), map);
+                repository.put(newResource.getPath(), newResource);
+                return newResource;
+            }
+
+            @Override
+            public void revert() {
+
+            }
+
+            @Override
+            public void commit() throws PersistenceException {
+                LOG.debug("Committing");
+                for(Map.Entry<String, Resource> e : repository.entrySet()) {
+                    LOG.debug("Committing {} ", e.getKey());
+                    Resource r = e.getValue();
+                    ModifiableValueMap vm = 
r.adaptTo(ModifiableValueMap.class);
+                    for (Map.Entry<String, Object> me : vm.entrySet()) {
+                        if (me.getValue() instanceof InputStream) {
+                            try {
+                                String value = IOUtils.toString((InputStream) 
me.getValue());
+                                LOG.debug("Converted {} {}  ", me.getKey(), 
value);
+                                vm.put(me.getKey(), value);
+
+                            } catch (IOException e1) {
+                                throw new PersistenceException("Failed to 
commit input stream", e1);
+                            }
+                        }
+                    }
+                    LOG.debug("Converted {} ", vm);
+                }
+                LOG.debug("Committted {} ", repository);
+
+
+            }
+
+            @Override
+            public boolean hasChanges() {
+                return false;
+            }
+        };
+
+        SlingHttpServletRequest request = new 
MockSlingHttpServlet3Request(null, null, null, null, null) {
+            @Override
+            public Object getAttribute(String name) {
+                if ( "request-parts-iterator".equals(name)) {
+                    return partsIterator;
+                }
+                return super.getAttribute(name);
+            }
+
+            @Override
+            public ResourceResolver getResourceResolver() {
+                return resourceResolver;
+            }
+        };
+        streamedUplodOperation.doRun(request, ressponse, changes);
+
+
+        {
+            Resource r = repository.get("/test/upload/location/test1.txt");
+            Assert.assertNotNull(r);
+            ValueMap m = r.adaptTo(ValueMap.class);
+            Assert.assertNotNull(m);
+
+
+            Assert.assertEquals("nt:file", m.get("jcr:primaryType"));
+
+        }
+        {
+            Resource r = 
repository.get("/test/upload/location/test1.txt/jcr:content");
+            Assert.assertNotNull(r);
+            ValueMap m = r.adaptTo(ValueMap.class);
+            Assert.assertNotNull(m);
+
+            Assert.assertEquals("nt:resource", m.get("jcr:primaryType"));
+            Assert.assertTrue(m.get("jcr:lastModified") instanceof Calendar);
+            Assert.assertEquals("text/plain", m.get("jcr:mimeType"));
+            Assert.assertEquals("test", m.get("jcr:data"));
+
+        }
+        {
+            Resource r = repository.get("/test/upload/location/test2.txt");
+            Assert.assertNotNull(r);
+            ValueMap m = r.adaptTo(ValueMap.class);
+            Assert.assertNotNull(m);
+
+
+            Assert.assertEquals("nt:file", m.get("jcr:primaryType"));
+
+        }
+        {
+            Resource r = 
repository.get("/test/upload/location/test2.txt/jcr:content");
+            Assert.assertNotNull(r);
+            ValueMap m = r.adaptTo(ValueMap.class);
+            Assert.assertNotNull(m);
+
+
+            Assert.assertEquals("nt:resource", m.get("jcr:primaryType"));
+            Assert.assertTrue(m.get("jcr:lastModified") instanceof Calendar);
+            Assert.assertEquals("text/plain2", m.get("jcr:mimeType"));
+            Assert.assertEquals("test1234", m.get("jcr:data"));
+        }
+
+
+    }
+}

Propchange: 
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/impl/operations/StreamingUploadOperationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: sling/trunk/launchpad/builder/src/main/provisioning/sling.txt
URL: 
http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/src/main/provisioning/sling.txt?rev=1756168&r1=1756167&r2=1756168&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/src/main/provisioning/sling.txt (original)
+++ sling/trunk/launchpad/builder/src/main/provisioning/sling.txt Fri Aug 12 
11:57:57 2016
@@ -76,7 +76,7 @@
     org.apache.sling/org.apache.sling.scripting.sightly.repl/1.0.2
     org.apache.sling/org.apache.sling.serviceusermapper/1.2.2
     org.apache.sling/org.apache.sling.servlets.get/2.1.17-SNAPSHOT
-    org.apache.sling/org.apache.sling.servlets.post/2.3.12
+    org.apache.sling/org.apache.sling.servlets.post/2.3.13-SNAPSHOT
     org.apache.sling/org.apache.sling.servlets.resolver/2.4.3-SNAPSHOT
     org.apache.sling/org.apache.sling.xss/1.0.8
     javax.mail/mail/1.4.7


Reply via email to