• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

evolvedbinary / elemental / 982

29 Apr 2025 08:34PM UTC coverage: 56.409% (+0.007%) from 56.402%
982

push

circleci

adamretter
[feature] Improve README.md badges

28451 of 55847 branches covered (50.94%)

Branch coverage included in aggregate %.

77468 of 131924 relevant lines covered (58.72%)

0.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/exist-core/src/main/java/org/exist/protocolhandler/xmlrpc/XmlrpcUpload.java
1
/*
2
 * Elemental
3
 * Copyright (C) 2024, Evolved Binary Ltd
4
 *
5
 * admin@evolvedbinary.com
6
 * https://www.evolvedbinary.com | https://www.elemental.xyz
7
 *
8
 * Use of this software is governed by the Business Source License 1.1
9
 * included in the LICENSE file and at www.mariadb.com/bsl11.
10
 *
11
 * Change Date: 2028-04-27
12
 *
13
 * On the date above, in accordance with the Business Source License, use
14
 * of this software will be governed by the Apache License, Version 2.0.
15
 *
16
 * Additional Use Grant: Production use of the Licensed Work for a permitted
17
 * purpose. A Permitted Purpose is any purpose other than a Competing Use.
18
 * A Competing Use means making the Software available to others in a commercial
19
 * product or service that: substitutes for the Software; substitutes for any
20
 * other product or service we offer using the Software that exists as of the
21
 * date we make the Software available; or offers the same or substantially
22
 * similar functionality as the Software.
23
 *
24
 * NOTE: Parts of this file contain code from 'The eXist-db Authors'.
25
 *       The original license header is included below.
26
 *
27
 * =====================================================================
28
 *
29
 * eXist-db Open Source Native XML Database
30
 * Copyright (C) 2001 The eXist-db Authors
31
 *
32
 * info@exist-db.org
33
 * http://www.exist-db.org
34
 *
35
 * This library is free software; you can redistribute it and/or
36
 * modify it under the terms of the GNU Lesser General Public
37
 * License as published by the Free Software Foundation; either
38
 * version 2.1 of the License, or (at your option) any later version.
39
 *
40
 * This library is distributed in the hope that it will be useful,
41
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
42
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
43
 * Lesser General Public License for more details.
44
 *
45
 * You should have received a copy of the GNU Lesser General Public
46
 * License along with this library; if not, write to the Free Software
47
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
48
 */
49
package org.exist.protocolhandler.xmlrpc;
50

51
import java.io.IOException;
52
import java.io.InputStream;
53
import java.util.ArrayList;
54
import java.util.List;
55
import java.net.URL;
56

57
import org.apache.logging.log4j.LogManager;
58
import org.apache.logging.log4j.Logger;
59
import org.apache.xmlrpc.client.XmlRpcClient;
60
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
61

62
import org.exist.protocolhandler.xmldb.XmldbURL;
63
import org.exist.util.MimeTable;
64
import org.exist.util.MimeType;
65

66
import static java.nio.charset.StandardCharsets.UTF_8;
67

68
/**
69
 * Write document using XML-RPC to remote database and read the data
70
 * from an input stream.
71
 * 
72
 * Sends a document to the server using XML-RPC. The document can be
73
 * either XML or non-XML (binary). Chunked means that the document is send 
74
 * as smaller parts to the server, the servlet glues the parts together. There
75
 * is no limitation on the size of the documents that can be transported.
76
 *
77
 * @author Dannes Wessels
78
 */
79
public class XmlrpcUpload {
×
80
    
81
    private final static Logger LOG = LogManager.getLogger(XmlrpcUpload.class);
×
82
    
83
    /**
84
     * Write data from a (input)stream to the specified XML-RPC url and leave
85
     * the input stream open.
86
     * 
87
     * @param xmldbURL URL pointing to location on the server.
88
     * @param is Document stream
89
     * @throws IOException When something is wrong.
90
     */
91
    public void stream(XmldbURL xmldbURL, InputStream is) throws IOException {
92
        LOG.debug("Begin document upload");
×
93
        try {
94
            // Setup xmlrpc client
95
            final XmlRpcClient client = new XmlRpcClient();
×
96
            final XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
×
97
            config.setEncoding(UTF_8.name());
×
98
            config.setEnabledForExtensions(true);
×
99
            config.setServerURL(new URL(xmldbURL.getXmlRpcURL()));
×
100

101
            if(xmldbURL.hasUserInfo()) {
×
102
                config.setBasicUserName(xmldbURL.getUsername());
×
103
                config.setBasicPassword(xmldbURL.getPassword());
×
104
            }
105
            client.setConfig(config);
×
106

107
            String contentType=MimeType.BINARY_TYPE.getName();
×
108
            final MimeType mime
×
109
                    = MimeTable.getInstance().getContentTypeFor(xmldbURL.getDocumentName());
×
110
            if (mime != null){
×
111
                contentType = mime.getName();
×
112
            }
113
            
114
            // Initialize xmlrpc parameters
115
            final List<Object> params = new ArrayList<>(5);
×
116
            String handle=null;
×
117
            
118
            // Copy data from inputstream to database
119
            final byte[] buf = new byte[4096];
×
120
            int len;
121
            while ((len = is.read(buf)) > 0) {
×
122
                params.clear();
×
123
                if(handle!=null){
×
124
                    params.add(handle);
×
125
                }
126
                params.add(buf);
×
127
                params.add(len);
×
128
                handle = (String)client.execute("upload", params);
×
129
            }
130
            
131
            // All data transported, now parse data on server
132
            params.clear();
×
133
            params.add(handle);
×
134
            params.add(xmldbURL.getCollectionPath() );
×
135
            params.add(Boolean.TRUE);
×
136
            params.add(contentType);
×
137
            final Boolean result =(Boolean)client.execute("parseLocal", params);
×
138
            
139
            // Check XMLRPC result
140
            if(result){
×
141
                LOG.debug("Document stored.");
×
142
            } else {
×
143
                LOG.debug("Could not store document.");
×
144
                throw new IOException("Could not store document.");
×
145
            }
146
            
147
        } catch (final IOException ex) {
×
148
            LOG.debug(ex);
×
149
            throw ex;
×
150
            
151
        } catch (final Exception ex) {
×
152
            LOG.debug(ex);
×
153
            throw new IOException(ex.getMessage(), ex);
×
154
            
155
        } finally {
156
           LOG.debug("Finished document upload");
×
157
        }
158
    }
×
159

160
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc