This is an automated email from the ASF dual-hosted git repository.
jleroux pushed a commit to branch release22.01
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/release22.01 by this push:
new 322c645705 Remove xml rpc (#630)
322c645705 is described below
commit 322c6457052fca2e1ff643013f4b3c31afed7b2e
Author: Deepak Dixit <[email protected]>
AuthorDate: Fri Apr 28 12:41:53 2023 +0530
Remove xml rpc (#630)
* Removed deprecated apache xmlrpc related code (OFBIZ-12812)
Apache XML-RPC is no longer maintained, its better to remove xml rpc
related code
https://github.com/advisories/GHSA-6vwp-35w3-xph8
* Removed unused imports
Backported from trunk, Conflict handled by hand in build.gradle
---
build.gradle | 2 -
.../org/apache/ofbiz/base/util/CacheFilter.java | 11 -
framework/common/servicedef/services_test.xml | 7 -
.../org/apache/ofbiz/common/CommonServices.java | 15 -
.../apache/ofbiz/common/login/LoginServices.java | 2 +-
.../webcommon/WEB-INF/handlers-controller.xml | 1 -
framework/service/config/ServiceErrorUiLabels.xml | 21 -
framework/service/config/serviceengine.xml | 8 -
framework/service/servicedef/services_test_se.xml | 15 -
.../ofbiz/service/engine/XMLRPCClientEngine.java | 154 -------
.../ofbiz/service/test/AbstractXmlRpcTestCase.java | 89 ----
.../org/apache/ofbiz/service/test/XmlRpcTests.java | 104 -----
.../xmlrpc/AliasSupportedTransportFactory.java | 143 ------
.../ofbiz/service/xmlrpc/OfbizXmlRpcClient.java | 73 ----
framework/service/testdef/servicetests.xml | 9 +-
framework/webapp/config/url.properties | 2 +-
.../ofbiz/webapp/event/XmlRpcEventHandler.java | 485 ---------------------
framework/webapp/testdef/webapptests.xml | 3 -
.../webapp/webtools/WEB-INF/controller.xml | 7 -
framework/webtools/webapp/webtools/WEB-INF/web.xml | 4 -
20 files changed, 3 insertions(+), 1152 deletions(-)
diff --git a/build.gradle b/build.gradle
index b278448736..c6bb114bc7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -247,8 +247,6 @@ dependencies {
implementation 'org.apache.xmlgraphics:batik-util:1.14'
implementation 'org.apache.xmlgraphics:batik-bridge:1.14'
implementation 'org.apache.xmlgraphics:fop:2.3' // NOTE: since 2.4
dependencies are messed up. See
https://github.com/moqui/moqui-fop/blob/master/build.gradle
- implementation 'org.apache.xmlrpc:xmlrpc-client:3.1.3'
- implementation 'org.apache.xmlrpc:xmlrpc-server:3.1.3'
implementation 'org.clojure:clojure:1.10.2'
implementation 'org.codehaus.groovy:groovy-all:2.5.18' // Compile issue
with commons-cli and Groovy 3. Remember to change the version number in javadoc
block.
implementation 'org.freemarker:freemarker:2.3.31' // Remember to change
the version number in FreeMarkerWorker class when upgrading. See OFBIZ-10019 if
>= 2.4
diff --git
a/framework/base/src/main/java/org/apache/ofbiz/base/util/CacheFilter.java
b/framework/base/src/main/java/org/apache/ofbiz/base/util/CacheFilter.java
index 8f05ce6b61..29ff7ba7df 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/CacheFilter.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/CacheFilter.java
@@ -19,7 +19,6 @@
package org.apache.ofbiz.base.util;
import java.io.IOException;
-import java.util.stream.Collectors;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -61,16 +60,6 @@ public class CacheFilter implements Filter {
String context = ((HttpServletRequest) request).getContextPath();
String uriWithContext = ((HttpServletRequest) request).getRequestURI();
String uri = uriWithContext.substring(context.length());
-
- if ("/control/xmlrpc".equals(uri.toLowerCase())) {
- // Read request.getReader() as many time you need
- request = new RequestWrapper((HttpServletRequest) request);
- String body =
request.getReader().lines().collect(Collectors.joining());
- if (body.contains("</serializable")) {
- Debug.logError("Content not authorised for security reason",
"CacheFilter"); // Cf. OFBIZ-12332
- return;
- }
- }
chain.doFilter(request, response);
}
diff --git a/framework/common/servicedef/services_test.xml
b/framework/common/servicedef/services_test.xml
index 9a68160ab6..67a992747b 100644
--- a/framework/common/servicedef/services_test.xml
+++ b/framework/common/servicedef/services_test.xml
@@ -215,13 +215,6 @@ under the License.
<description>Test the Route engine</description>
</service>
- <service name="simpleMapListTest" engine="java" auth="false" export="true"
- location="org.apache.ofbiz.common.CommonServices"
invoke="simpleMapListTest">
- <description>To test XML-RPC handling of Maps and Lists</description>
- <attribute name="listOfStrings" type="List" mode="IN"/>
- <attribute name="mapOfStrings" type="Map" mode="IN"/>
- </service>
-
<service name="testJavaScript" engine="javascript" auth="false"
location="component://common/minilang/JavaScriptTest.js" invoke="">
<description>Test JavaScript Service</description>
diff --git
a/framework/common/src/main/java/org/apache/ofbiz/common/CommonServices.java
b/framework/common/src/main/java/org/apache/ofbiz/common/CommonServices.java
index c84b74be02..22b832bcf9 100644
--- a/framework/common/src/main/java/org/apache/ofbiz/common/CommonServices.java
+++ b/framework/common/src/main/java/org/apache/ofbiz/common/CommonServices.java
@@ -18,9 +18,6 @@
*******************************************************************************/
package org.apache.ofbiz.common;
-import static org.apache.ofbiz.base.util.UtilGenerics.checkCollection;
-import static org.apache.ofbiz.base.util.UtilGenerics.checkMap;
-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -433,18 +430,6 @@ public class CommonServices {
return ServiceUtil.returnSuccess();
}
- public static Map<String, Object> simpleMapListTest(DispatchContext dctx,
Map<String, ?> context) {
- List<String> listOfStrings =
checkCollection(context.get("listOfStrings"), String.class);
- Map<String, String> mapOfStrings =
checkMap(context.get("mapOfStrings"), String.class, String.class);
-
- for (String str: listOfStrings) {
- String v = mapOfStrings.get(str);
- Debug.logInfo("SimpleMapListTest: " + str + " -> " + v, MODULE);
- }
-
- return ServiceUtil.returnSuccess();
- }
-
public static Map<String, Object> mcaTest(DispatchContext dctx,
Map<String, ?> context) {
MimeMessageWrapper wrapper = (MimeMessageWrapper)
context.get("messageWrapper");
MimeMessage message = wrapper.getMessage();
diff --git
a/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
b/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
index 145d58e0e9..c24757d056 100644
---
a/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
+++
b/framework/common/src/main/java/org/apache/ofbiz/common/login/LoginServices.java
@@ -221,7 +221,7 @@ public class LoginServices {
boolean useTomcatSSO =
EntityUtilProperties.propertyValueEquals("security",
"security.login.tomcat.sso", "true");
HttpServletRequest request =
(javax.servlet.http.HttpServletRequest) context.get("request");
// when request is not supplied, we will treat that
SSO is not required as
- // in the usage of userLogin service in
ICalWorker.java and XmlRpcEventHandler.java.
+ // in the usage of userLogin service in ICalWorker.java
useTomcatSSO = useTomcatSSO && (request != null);
// resolve the key for decrypt the token and control
the validity
diff --git a/framework/common/webcommon/WEB-INF/handlers-controller.xml
b/framework/common/webcommon/WEB-INF/handlers-controller.xml
index 9e1b9e7289..a0ed915baa 100644
--- a/framework/common/webcommon/WEB-INF/handlers-controller.xml
+++ b/framework/common/webcommon/WEB-INF/handlers-controller.xml
@@ -25,7 +25,6 @@ under the License.
<!-- event handlers -->
<handler name="java" type="request"
class="org.apache.ofbiz.webapp.event.JavaEventHandler"/>
<!-- <handler name="soap" type="request"
class="org.apache.ofbiz.webapp.event.SOAPEventHandler"/> -->
- <handler name="xmlrpc" type="request"
class="org.apache.ofbiz.webapp.event.XmlRpcEventHandler"/>
<handler name="service" type="request"
class="org.apache.ofbiz.webapp.event.ServiceEventHandler"/>
<handler name="service-multi" type="request"
class="org.apache.ofbiz.webapp.event.ServiceMultiEventHandler"/>
<handler name="simple" type="request"
class="org.apache.ofbiz.webapp.event.SimpleEventHandler"/>
diff --git a/framework/service/config/ServiceErrorUiLabels.xml
b/framework/service/config/ServiceErrorUiLabels.xml
index a88f919c86..8ef3fc2d3c 100644
--- a/framework/service/config/ServiceErrorUiLabels.xml
+++ b/framework/service/config/ServiceErrorUiLabels.xml
@@ -274,27 +274,6 @@
<value
xml:lang="zh">调用子服务时出错,它应该返回一个错误,而不是抛出一个意外,因此发生了错误:${errorString}</value>
<value
xml:lang="zh-TW">呼叫子服務時出錯,它應該回傳一個錯誤,而不是拋出一個異常外,因此發生了錯誤:${errorString}</value>
</property>
- <property key="ServiceTestXmlRpcCalculationOK">
- <value xml:lang="en">adding integer 125 to 365 yields </value>
- <value xml:lang="it">aggiungere intero 125 a 365 yields </value>
- <value xml:lang="ja">整数 125 ~ 365 の加算が生じます </value>
- <value xml:lang="zh">把整数125加到365,生成</value>
- <value xml:lang="zh-TW">把整數125加到365,產生</value>
- </property>
- <property key="ServiceTestXmlRpcCalculationKO">
- <value xml:lang="en">calcul is wrong ! Why ?</value>
- <value xml:lang="it">calcolo è errato ! Perchè ?</value>
- <value xml:lang="ja">計算に誤りがあります!なぜ?</value>
- <value xml:lang="zh">计算错误!为什么?</value>
- <value xml:lang="zh-TW">計算錯誤!為什麼?</value>
- </property>
- <property key="ServiceTestXmlRpcMissingParameters">
- <value xml:lang="en">missing parameters</value>
- <value xml:lang="it">parametri mancanti</value>
- <value xml:lang="ja">パラメータが正しくありません</value>
- <value xml:lang="zh">缺少参数</value>
- <value xml:lang="zh-TW">缺少參數</value>
- </property>
<property key="ServiceValueFound">
<value xml:lang="en">Value found (with ids ${pkFields}), cannot create
a new one</value>
<value xml:lang="fr">La valeur a été trouvée (avec les réfs.
${pkFields}), une nouvelle ne peut donc pas être créée</value>
diff --git a/framework/service/config/serviceengine.xml
b/framework/service/config/serviceengine.xml
index a17295269a..e88be850a3 100644
--- a/framework/service/config/serviceengine.xml
+++ b/framework/service/config/serviceengine.xml
@@ -57,14 +57,6 @@ under the License.
<engine name="jms"
class="org.apache.ofbiz.service.jms.JmsServiceEngine"/>
<engine name="rmi"
class="org.apache.ofbiz.service.rmi.RmiServiceEngine"/>
<!-- <engine name="soap"
class="org.apache.ofbiz.service.engine.SOAPClientEngine"/> -->
- <!-- The engine xml-rpc-local is only used by a test service and for
this reason it is configured to run on port 8080.
- In order to use this in OFBiz change the port accordingly (for
demo the default value is 8080)
- -->
- <engine name="xml-rpc-local"
class="org.apache.ofbiz.service.engine.XMLRPCClientEngine">
- <parameter name="url"
value="http://localhost:8080/webtools/control/xmlrpc"/>
- <parameter name="login" value="admin"/>
- <parameter name="password" value="ofbiz"/>
- </engine>
<service-location name="main-rmi"
location="rmi://localhost:1099/RMIDispatcher"/>
<!-- <service-location name="main-http"
location="http://localhost:8080/webtools/control/httpService"/>
diff --git a/framework/service/servicedef/services_test_se.xml
b/framework/service/servicedef/services_test_se.xml
index d267a871b6..1fd4733e2e 100644
--- a/framework/service/servicedef/services_test_se.xml
+++ b/framework/service/servicedef/services_test_se.xml
@@ -152,21 +152,6 @@ under the License.
location="org.apache.ofbiz.service.test.ServiceEngineTestServices"
invoke="testServiceEcaGlobalEventExecOnRollback">
</service>
- <!-- Call xml rpc from engine -->
- <service name="testXmlRpcAdd" engine="java" auth="false"
location="org.apache.ofbiz.service.test.XmlRpcTests" invoke="testXmlRpcAdd"
export="true">
- <attribute name="num1" mode="IN" type="Integer"/>
- <attribute name="num2" mode="IN" type="Integer"/>
- <attribute name="resulting" mode="OUT" type="Integer"/>
- </service>
- <service name="testXmlRpcLocalEngine" engine="xml-rpc-local" auth="false"
invoke="testXmlRpcAdd">
- <attribute name="num1" mode="IN" type="Integer"/>
- <attribute name="num2" mode="IN" type="Integer"/>
- <attribute name="resulting" mode="OUT" type="Integer"/>
- </service>
- <service name="testXmlRpcClientAdd" engine="java" auth="false"
location="org.apache.ofbiz.service.test.XmlRpcTests"
invoke="testXmlRpcClientAdd">
- <implements service="testServiceInterface"/>
- </service>
-
<!--Test permission-->
<service name="testSimplePermission" engine="java" auth="true"
location="org.apache.ofbiz.service.test.ServiceEngineTestPermissionServices"
invoke="genericTestService">
diff --git
a/framework/service/src/main/java/org/apache/ofbiz/service/engine/XMLRPCClientEngine.java
b/framework/service/src/main/java/org/apache/ofbiz/service/engine/XMLRPCClientEngine.java
deleted file mode 100644
index b312b0de81..0000000000
---
a/framework/service/src/main/java/org/apache/ofbiz/service/engine/XMLRPCClientEngine.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*******************************************************************************
- * 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.ofbiz.service.engine;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.ofbiz.base.config.GenericConfigException;
-import org.apache.ofbiz.base.start.Start;
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.UtilGenerics;
-import org.apache.ofbiz.base.util.UtilMisc;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.service.GenericServiceException;
-import org.apache.ofbiz.service.ModelParam;
-import org.apache.ofbiz.service.ModelService;
-import org.apache.ofbiz.service.ServiceDispatcher;
-import org.apache.ofbiz.service.ServiceUtil;
-import org.apache.ofbiz.service.config.ServiceConfigUtil;
-import org.apache.ofbiz.service.xmlrpc.OfbizXmlRpcClient;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-
-/**
- * Engine For XML RPC CLient Configuration management
- */
-public class XMLRPCClientEngine extends GenericAsyncEngine {
-
- private static final String MODULE = XMLRPCClientEngine.class.getName();
-
- public XMLRPCClientEngine(ServiceDispatcher dispatcher) {
- super(dispatcher);
- }
-
- /**
- * @see
org.apache.ofbiz.service.engine.GenericEngine#runSyncIgnore(java.lang.String,
org.apache.ofbiz.service.ModelService, java.util.Map)
- */
- @Override
- public void runSyncIgnore(String localName, ModelService modelService,
Map<String, Object> context) throws GenericServiceException {
- runSync(localName, modelService, context);
- }
-
- /**
- * @see
org.apache.ofbiz.service.engine.GenericEngine#runSync(java.lang.String,
org.apache.ofbiz.service.ModelService, java.util.Map)
- */
- @Override
- public Map<String, Object> runSync(String localName, ModelService
modelService, Map<String, Object> context) throws GenericServiceException {
- Map<String, Object> result = serviceInvoker(modelService, context);
-
- if (result == null) {
- throw new GenericServiceException("Service did not return expected
result");
- }
- return result;
- }
-
- /*
- * Invoke the remote XMLRPC SERVICE : This engine convert all value in IN
mode to one struct.
- */
- private static Map<String, Object> serviceInvoker(ModelService
modelService, Map<String, Object> context)
- throws GenericServiceException {
- if (modelService.getLocation() == null || modelService.getInvoke() ==
null) {
- throw new GenericServiceException("Cannot locate service to
invoke");
- }
-
- XmlRpcClientConfigImpl config = null;
- OfbizXmlRpcClient client = null;
- String serviceName = modelService.getInvoke();
- String engine = modelService.getEngineName();
- String url = null;
- String login = null;
- String password = null;
- String keyStoreComponent = null;
- String keyStoreName = null;
- String keyAlias = null;
- try {
- url = ServiceConfigUtil.getEngineParameter(engine, "url");
- if (Start.getInstance().getConfig().getPortOffset() != 0) {
- String s = url.substring(url.lastIndexOf(":") + 1);
- Integer rpcPort = Integer.valueOf(s.substring(0,
s.indexOf("/")));
- Integer port = rpcPort +
Start.getInstance().getConfig().getPortOffset();
- url = url.replace(rpcPort.toString(), port.toString());
- }
- // Necessary for "service-xml-rpc-local-engine" test
- if ("testXmlRpcAdd".equals(serviceName)) {
- url = url + "?USERNAME=admin&PASSWORD=ofbiz";
- }
- login = ServiceConfigUtil.getEngineParameter(engine, "login");
- password = ServiceConfigUtil.getEngineParameter(engine,
"password");
- keyStoreComponent = ServiceConfigUtil.getEngineParameter(engine,
"keyStoreComponent");
- keyStoreName = ServiceConfigUtil.getEngineParameter(engine,
"keyStoreName");
- keyAlias = ServiceConfigUtil.getEngineParameter(engine,
"keyAlias");
- config = new XmlRpcClientConfigImpl();
- config.setBasicUserName(login);
- config.setBasicPassword(password);
- config.setServerURL(new URL(url));
- } catch (MalformedURLException | GenericConfigException e) {
- throw new GenericServiceException("Cannot invoke service : engine
parameters are not correct");
- }
- if (UtilValidate.isNotEmpty(keyStoreComponent) &&
UtilValidate.isNotEmpty(keyStoreName) && UtilValidate.isNotEmpty(keyAlias)) {
- client = new OfbizXmlRpcClient(config, keyStoreComponent,
keyStoreName, keyAlias);
- } else {
- client = new OfbizXmlRpcClient(config);
- }
- List<ModelParam> inModelParamList = modelService.getInModelParamList();
-
- if (Debug.verboseOn()) {
- Debug.logVerbose("[XMLRPCClientEngine.invoke] : Parameter length -
" + inModelParamList.size(), MODULE);
- for (ModelParam p: inModelParamList) {
- Debug.logVerbose("[XMLRPCClientEngine.invoke} : Parameter: " +
p.getName() + " (" + p.getMode() + ")", MODULE);
- }
- }
-
- Map<String, Object> result = null;
- Map<String, Object> params = new HashMap<>();
- for (ModelParam modelParam: modelService.getModelParamList()) {
- // don't include OUT parameters in this list, only IN and INOUT
- if (ModelService.OUT_PARAM.equals(modelParam.getMode()) ||
modelParam.getInternal()) {
- continue;
- }
-
- Object paramValue = context.get(modelParam.getName());
- if (paramValue != null) {
- params.put(modelParam.getName(), paramValue);
- }
- }
-
- List<Map<String, Object>> listParams = UtilMisc.toList(params);
- try {
- result = UtilGenerics.cast(client.execute(serviceName,
listParams.toArray()));
- } catch (XmlRpcException e) {
- result = ServiceUtil.returnError(e.getLocalizedMessage());
- }
- return result;
- }
-}
diff --git
a/framework/service/src/main/java/org/apache/ofbiz/service/test/AbstractXmlRpcTestCase.java
b/framework/service/src/main/java/org/apache/ofbiz/service/test/AbstractXmlRpcTestCase.java
deleted file mode 100644
index e7c8e23034..0000000000
---
a/framework/service/src/main/java/org/apache/ofbiz/service/test/AbstractXmlRpcTestCase.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- 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.ofbiz.service.test;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-import org.apache.ofbiz.service.xmlrpc.OfbizXmlRpcClient;
-import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
-
-import junit.framework.TestCase;
-
-/**
- * AbstractXmlRpcTestCase
- */
-public class AbstractXmlRpcTestCase extends TestCase {
-
- private static final String MODULE =
AbstractXmlRpcTestCase.class.getName();
-
- private String keyStoreComponent;
- private String keyStoreName;
- private String keyAlias;
-
- public AbstractXmlRpcTestCase(String name, String keyStoreComponent,
String keyStoreName, String keyAlias) {
- super(name);
- this.keyStoreComponent = keyStoreComponent;
- this.keyStoreName = keyStoreName;
- this.keyAlias = keyAlias;
- }
-
- public AbstractXmlRpcTestCase(String name) {
- super(name);
- this.keyStoreComponent = null;
- this.keyStoreName = null;
- this.keyAlias = null;
- }
-
-
- /**
- * Gets rpc client.
- * @param url the url
- * @return the rpc client
- * @throws MalformedURLException the malformed url exception
- */
- public org.apache.xmlrpc.client.XmlRpcClient getRpcClient(String url)
throws MalformedURLException {
- return getRpcClient(url, null, null);
- }
-
- /**
- * Gets rpc client.
- * @param url the url
- * @param login the login
- * @param password the password
- * @return the rpc client
- * @throws MalformedURLException the malformed url exception
- */
- public org.apache.xmlrpc.client.XmlRpcClient getRpcClient(String url,
String login, String password) throws MalformedURLException {
- XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- config.setServerURL(new URL(url));
- if (login != null) {
- config.setBasicUserName(login);
- }
- if (password != null) {
- config.setBasicPassword(password);
- }
-
- if (keyStoreComponent != null && keyStoreName != null && keyAlias !=
null) {
- return new OfbizXmlRpcClient(config, keyStoreComponent,
keyStoreName, keyAlias);
- }
- return new OfbizXmlRpcClient(config);
- }
-}
diff --git
a/framework/service/src/main/java/org/apache/ofbiz/service/test/XmlRpcTests.java
b/framework/service/src/main/java/org/apache/ofbiz/service/test/XmlRpcTests.java
deleted file mode 100644
index 0e500fd0e3..0000000000
---
a/framework/service/src/main/java/org/apache/ofbiz/service/test/XmlRpcTests.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- 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.ofbiz.service.test;
-
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.ofbiz.base.start.Start;
-import org.apache.ofbiz.base.util.UtilGenerics;
-import org.apache.ofbiz.base.util.UtilProperties;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.service.DispatchContext;
-import org.apache.ofbiz.service.GenericServiceException;
-import org.apache.ofbiz.service.ModelService;
-import org.apache.ofbiz.service.ServiceUtil;
-import org.apache.xmlrpc.client.XmlRpcClient;
-/**
- * XmlRpcTests
- */
-public class XmlRpcTests extends AbstractXmlRpcTestCase {
-
- private static final String RESOURCE = "ServiceErrorUiLabels";
- private static String url =
"http://localhost:8080/webtools/control/xmlrpc?USERNAME=admin&PASSWORD=ofbiz";
-
- public XmlRpcTests(String name) {
- super(name);
- if (Start.getInstance().getConfig().getPortOffset() != 0) {
- Integer port = 8080 +
Start.getInstance().getConfig().getPortOffset();
- url = url.replace("8080", port.toString());
- }
- }
-
- /**
- * Test Xml Rpc by java class call with a Object List
- * @throws Exception
- */
- public void testXmlRpcRequest() throws Exception {
- XmlRpcClient client = this.getRpcClient(url, "admin", "ofbiz");
- Object[] params = new Object[] {55.00, "message from xml-rpc client" };
- Map<String, Object> result =
UtilGenerics.cast(client.execute("testScv", params));
- assertEquals("XML-RPC Service result success", "service done",
result.get("resp"));
- }
-
- /**
- * Service to receive information from xml-rpc call
- */
- public static Map<String, Object> testXmlRpcAdd(DispatchContext dctx,
Map<String, ?> context) {
- Locale locale = (Locale) context.get("locale");
- Map<String, Object> response = ServiceUtil.returnSuccess();
- Integer num1 = (Integer) context.get("num1");
- Integer num2 = (Integer) context.get("num2");
- if (UtilValidate.isEmpty(num1) || UtilValidate.isEmpty(num2)) {
- return ServiceUtil.returnError(UtilProperties.getMessage(RESOURCE,
"ServiceTestXmlRpcMissingParameters", locale));
- }
- Integer res = num1 + num2;
- response.put("resulting", res);
- return response;
- }
-
- /**
- * Service to send information to xml-rpc service
- */
- public static Map<String, Object> testXmlRpcClientAdd(DispatchContext
dctx, Map<String, ?> context) {
- Locale locale = (Locale) context.get("locale");
- Map<String, Object> result = null;
- Integer num1 = 125;
- Integer num2 = 365;
- try {
- Map<String, Object> localMap =
dctx.makeValidContext("testXmlRpcLocalEngine", ModelService.IN_PARAM, context);
- localMap.put("num1", num1);
- localMap.put("num2", num2);
- result = dctx.getDispatcher().runSync("testXmlRpcLocalEngine",
localMap);
- } catch (GenericServiceException e) {
- return ServiceUtil.returnError(e.getLocalizedMessage());
- }
- if (ServiceUtil.isError(result)) {
- return result;
- }
- Integer res = (Integer) result.get("resulting");
- if (res == (num1 + num2)) {
- result =
ServiceUtil.returnSuccess(UtilProperties.getMessage(RESOURCE,
"ServiceTestXmlRpcCalculationOK", locale) + res);
- } else {
- result =
ServiceUtil.returnError(UtilProperties.getMessage(RESOURCE,
"ServiceTestXmlRpcCalculationKO", locale));
- }
- return result;
- }
-}
diff --git
a/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/AliasSupportedTransportFactory.java
b/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/AliasSupportedTransportFactory.java
deleted file mode 100644
index ad964c9623..0000000000
---
a/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/AliasSupportedTransportFactory.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- 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.ofbiz.service.xmlrpc;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-
-import javax.net.ssl.HttpsURLConnection;
-
-import org.apache.ofbiz.base.util.GeneralException;
-import org.apache.ofbiz.base.util.SSLUtil;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.XmlRpcRequest;
-import org.apache.xmlrpc.client.XmlRpcClientException;
-import org.apache.xmlrpc.client.XmlRpcHttpClientConfig;
-import org.apache.xmlrpc.client.XmlRpcHttpTransport;
-import org.apache.xmlrpc.client.XmlRpcTransport;
-import org.apache.xmlrpc.client.XmlRpcTransportFactoryImpl;
-import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
-import org.apache.xmlrpc.util.HttpUtil;
-import org.xml.sax.SAXException;
-
-/**
- * AliasSupportedTransportFactory
- */
-public class AliasSupportedTransportFactory extends XmlRpcTransportFactoryImpl
{
-
- private final AliasSupportedTransport transport;
-
- public
AliasSupportedTransportFactory(org.apache.xmlrpc.client.XmlRpcClient client,
KeyStore ks, String password, String alias) {
- super(client);
- transport = new AliasSupportedTransport(client, ks, password, alias);
- }
-
- @Override
- public XmlRpcTransport getTransport() {
- return transport;
- }
-
- class AliasSupportedTransport extends XmlRpcHttpTransport {
-
- private URLConnection con;
- private String password;
- private String alias;
- private KeyStore ks;
-
- protected
AliasSupportedTransport(org.apache.xmlrpc.client.XmlRpcClient client, KeyStore
ks, String password, String alias) {
- super(client, USER_AGENT + " (Sun HTTP Transport)");
- this.password = password;
- this.alias = alias;
- this.ks = ks;
- }
-
- @Override
- public Object sendRequest(XmlRpcRequest req) throws XmlRpcException {
- XmlRpcHttpClientConfig config = (XmlRpcHttpClientConfig)
req.getConfig();
- URL serverUrl = config.getServerURL();
- if (serverUrl == null) {
- throw new XmlRpcException("Invalid server URL");
- }
-
- try {
- con = openConnection(serverUrl);
- con.setUseCaches(false);
- con.setDoInput(true);
- con.setDoOutput(true);
- } catch (IOException e) {
- throw new XmlRpcException("Failed to create URLConnection: " +
e.getMessage(), e);
- }
- return super.sendRequest(req);
- }
-
- protected URLConnection openConnection(URL url) throws IOException {
- URLConnection con = url.openConnection();
- if ("HTTPS".equalsIgnoreCase(url.getProtocol())) {
- HttpsURLConnection scon = (HttpsURLConnection) con;
- try {
- scon.setSSLSocketFactory(SSLUtil.getSSLSocketFactory(ks,
password, alias));
-
scon.setHostnameVerifier(SSLUtil.getHostnameVerifier(SSLUtil.getHostCertMinCheck()));
- } catch (GeneralException | GeneralSecurityException e) {
- throw new IOException(e.getMessage());
- }
- }
-
- return con;
- }
-
- @Override
- protected void setRequestHeader(String header, String value) {
- con.setRequestProperty(header, value);
- }
-
- @Override
- protected void close() throws XmlRpcClientException {
- if (con instanceof HttpURLConnection) {
- // CHECKSTYLE_OFF: ALMOST_ALL
- ((HttpURLConnection) con).disconnect();
- // CHECKSTYLE_ON: ALMOST_ALL
- }
- }
-
- @Override
- protected boolean isResponseGzipCompressed(XmlRpcStreamRequestConfig
config) {
- return
HttpUtil.isUsingGzipEncoding(con.getHeaderField("Content-Encoding"));
- }
-
- @Override
- protected InputStream getInputStream() throws XmlRpcException {
- try {
- return con.getInputStream();
- } catch (IOException e) {
- throw new XmlRpcException("Failed to create input stream: " +
e.getMessage(), e);
- }
- }
-
- @Override
- protected void writeRequest(ReqWriter pWriter) throws IOException,
XmlRpcException, SAXException {
- pWriter.write(con.getOutputStream());
- }
- }
-}
diff --git
a/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/OfbizXmlRpcClient.java
b/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/OfbizXmlRpcClient.java
deleted file mode 100644
index 4cd01cfb6c..0000000000
---
a/framework/service/src/main/java/org/apache/ofbiz/service/xmlrpc/OfbizXmlRpcClient.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- 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.ofbiz.service.xmlrpc;
-
-import java.security.KeyStore;
-
-import org.apache.ofbiz.base.component.ComponentConfig;
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.KeyStoreUtil;
-import org.apache.xmlrpc.client.XmlRpcClientConfig;
-import org.apache.xmlrpc.client.XmlRpcTransportFactory;
-
-/**
- * XmlRpcClient
- */
-public class OfbizXmlRpcClient extends org.apache.xmlrpc.client.XmlRpcClient {
-
- private static final String MODULE = OfbizXmlRpcClient.class.getName();
-
- private String keyStoreComponent;
- private String keyStoreName;
- private String keyAlias;
-
- public OfbizXmlRpcClient(XmlRpcClientConfig config, String
keyStoreComponent, String keyStoreName, String keyAlias) {
- this(config);
- this.keyStoreComponent = keyStoreComponent;
- this.keyStoreName = keyStoreName;
- this.keyAlias = keyAlias;
- this.setTransportFactory(this.getClientTransportFactory());
- }
-
- public OfbizXmlRpcClient(XmlRpcClientConfig config) {
- super();
- this.setConfig(config);
- }
-
- /**
- * Gets client transport factory.
- * @return the client transport factory
- */
- public XmlRpcTransportFactory getClientTransportFactory() {
- if (keyStoreComponent == null || keyStoreName == null || keyAlias ==
null) {
- return this.getTransportFactory();
- }
-
- ComponentConfig.KeystoreInfo ks =
ComponentConfig.getKeystoreInfo(keyStoreComponent, keyStoreName);
- KeyStore keyStore = null;
- try {
- keyStore =
KeyStoreUtil.getStore(ks.createResourceHandler().getURL(), ks.getPassword(),
ks.getType());
- } catch (Exception e) {
- Debug.logError(e, "Unable to load keystore: " + keyStoreName,
MODULE);
- }
-
- return new AliasSupportedTransportFactory(this, keyStore,
ks.getPassword(), keyAlias);
- }
-}
diff --git a/framework/service/testdef/servicetests.xml
b/framework/service/testdef/servicetests.xml
index ee76d388ad..f6d299c087 100644
--- a/framework/service/testdef/servicetests.xml
+++ b/framework/service/testdef/servicetests.xml
@@ -66,14 +66,7 @@ under the License.
<test-case case-name="service-eca-global-event-exec-assert-data">
<entity-xml action="assert"
entity-xml-url="component://service/testdef/data/ServiceEcaGlobalEventAssertData.xml"/>
</test-case>
-
- <!-- This alone should allow Buildbot 3.2 to run the integration tests, cf
OFBIZ-12456 -->
- <!-- <test-case case-name="service-xml-rpc">
- <junit-test-suite
class-name="org.apache.ofbiz.service.test.XmlRpcTests"/>
- </test-case>
- <test-case case-name="service-xml-rpc-local-engine">
- <service-test service-name="testXmlRpcClientAdd"/>
- </test-case> -->
+
<test-case case-name="load-data-service-permission-tests">
<entity-xml
entity-xml-url="component://service/testdef/data/PermissionServiceTestData.xml"/>
</test-case>
diff --git a/framework/webapp/config/url.properties
b/framework/webapp/config/url.properties
index 15d0f53b96..72f8069f35 100644
--- a/framework/webapp/config/url.properties
+++ b/framework/webapp/config/url.properties
@@ -22,7 +22,7 @@
# If you want to use HTTP then set no.http=N. Else all requests will use HTTPS
(also enforced by a HSTS header) except if put in the http.request-map.list
no.http=Y
-http.request-map.list=SOAPService,xmlrpc,viewShipmentLabel
+http.request-map.list=SOAPService,viewShipmentLabel
# HTTPS Port (Secure port)
port.https.enabled=Y
diff --git
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/XmlRpcEventHandler.java
b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/XmlRpcEventHandler.java
deleted file mode 100644
index 9e4662cbc5..0000000000
---
a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/XmlRpcEventHandler.java
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- 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.ofbiz.webapp.event;
-
-import static org.apache.ofbiz.base.util.UtilGenerics.checkMap;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.ofbiz.base.util.Debug;
-import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.entity.Delegator;
-import org.apache.ofbiz.entity.DelegatorFactory;
-import org.apache.ofbiz.service.DispatchContext;
-import org.apache.ofbiz.service.GenericServiceException;
-import org.apache.ofbiz.service.LocalDispatcher;
-import org.apache.ofbiz.service.ModelService;
-import org.apache.ofbiz.service.ServiceContainer;
-import org.apache.ofbiz.service.ServiceUtil;
-import org.apache.ofbiz.webapp.control.ConfigXMLReader.Event;
-import org.apache.ofbiz.webapp.control.ConfigXMLReader.RequestMap;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.xmlrpc.XmlRpcHandler;
-import org.apache.xmlrpc.XmlRpcRequest;
-import org.apache.xmlrpc.XmlRpcRequestConfig;
-import org.apache.xmlrpc.common.ServerStreamConnection;
-import org.apache.xmlrpc.common.XmlRpcHttpRequestConfig;
-import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl;
-import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
-import org.apache.xmlrpc.parser.XmlRpcRequestParser;
-import org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping;
-import org.apache.xmlrpc.server.XmlRpcHttpServer;
-import org.apache.xmlrpc.server.XmlRpcHttpServerConfig;
-import org.apache.xmlrpc.server.XmlRpcNoSuchHandlerException;
-import org.apache.xmlrpc.util.HttpUtil;
-import org.apache.xmlrpc.util.SAXParsers;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-
-/**
- * XmlRpcEventHandler
- */
-public final class XmlRpcEventHandler extends XmlRpcHttpServer implements
EventHandler {
-
- private static final String MODULE = XmlRpcEventHandler.class.getName();
- private LocalDispatcher dispatcher;
-
- private Boolean enabledForExtensions = null;
- private Boolean enabledForExceptions = null;
-
- LocalDispatcher getDispatcher() {
- return dispatcher;
- }
-
- @Override
- public void init(ServletContext context) throws EventHandlerException {
- String delegatorName = context.getInitParameter("entityDelegatorName");
- Delegator delegator = DelegatorFactory.getDelegator(delegatorName);
- this.dispatcher =
ServiceContainer.getLocalDispatcher(delegator.getDelegatorName(), delegator);
- this.setHandlerMapping(new ServiceRpcHandler());
-
- String extensionsEnabledString =
context.getInitParameter("xmlrpc.enabledForExtensions");
- if (UtilValidate.isNotEmpty(extensionsEnabledString)) {
- enabledForExtensions = Boolean.valueOf(extensionsEnabledString);
- }
- String exceptionsEnabledString =
context.getInitParameter("xmlrpc.enabledForExceptions");
- if (UtilValidate.isNotEmpty(exceptionsEnabledString)) {
- enabledForExceptions = Boolean.valueOf(exceptionsEnabledString);
- }
- }
-
- @Override
- public String invoke(Event event, RequestMap requestMap,
HttpServletRequest req, HttpServletResponse res)
- throws EventHandlerException {
- String report = req.getParameter("echo");
- if (report != null) {
- BufferedReader reader = null;
- StringBuilder buf = new StringBuilder();
- try {
- // read the inputstream buffer
- String line;
- reader = new BufferedReader(new
InputStreamReader(req.getInputStream()));
- while ((line = reader.readLine()) != null) {
- buf.append(line).append("\n");
- }
- } catch (Exception e) {
- throw new EventHandlerException(e.getMessage(), e);
- } finally {
- if (reader != null) {
- try {
- reader.close();
- } catch (IOException e) {
- throw new EventHandlerException(e.getMessage(), e);
- }
- }
- }
- Debug.logInfo("Echo: " + buf.toString(), MODULE);
-
- // echo back the request
- try {
- res.setContentType("text/xml");
- Writer out = res.getWriter();
- out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- out.write("<methodResponse>");
- out.write("<params><param>");
- out.write("<value><string><![CDATA[");
- out.write(buf.toString());
- out.write("]]></string></value>");
- out.write("</param></params>");
- out.write("</methodResponse>");
- out.flush();
- } catch (Exception e) {
- throw new EventHandlerException(e.getMessage(), e);
- }
- } else {
- try {
- this.execute(this.getXmlRpcConfig(req), new
HttpStreamConnection(req, res));
- } catch (XmlRpcException e) {
- Debug.logError(e, MODULE);
- throw new EventHandlerException(e.getMessage(), e);
- }
- }
-
- return null;
- }
-
- @Override
- protected void setResponseHeader(ServerStreamConnection con, String
header, String value) {
- HttpStreamConnection hscon = (HttpStreamConnection) con;
- hscon.getResponse().setHeader(header, value);
- }
-
- private XmlRpcHttpRequestConfig getXmlRpcConfig(HttpServletRequest req) {
- OFBizXmlRpcHttpRequestConfigImpl result = new
OFBizXmlRpcHttpRequestConfigImpl(req);
- XmlRpcHttpServerConfig serverConfig = (XmlRpcHttpServerConfig)
getConfig();
-
- result.setBasicEncoding(serverConfig.getBasicEncoding());
-
result.setContentLengthOptional(serverConfig.isContentLengthOptional());
- result.setEnabledForExtensions(serverConfig.isEnabledForExtensions());
-
result.setGzipCompressing(HttpUtil.isUsingGzipEncoding(req.getHeader("Content-Encoding")));
-
result.setGzipRequesting(HttpUtil.isUsingGzipEncoding(req.getHeaders("Accept-Encoding")));
- result.setEncoding(req.getCharacterEncoding());
-
//result.setEnabledForExceptions(serverConfig.isEnabledForExceptions());
- HttpUtil.parseAuthorization(result, req.getHeader("Authorization"));
-
- // context overrides
- if (enabledForExtensions != null) {
- result.setEnabledForExtensions(enabledForExtensions);
- }
- if (enabledForExceptions != null) {
- result.setEnabledForExtensions(enabledForExceptions);
- }
- return result;
- }
-
- final class OfbizRpcAuthHandler implements
AbstractReflectiveHandlerMapping.AuthenticationHandler {
-
- @Override
- public boolean isAuthorized(XmlRpcRequest xmlRpcReq) throws
XmlRpcException {
- OFBizXmlRpcHttpRequestConfigImpl config =
(OFBizXmlRpcHttpRequestConfigImpl) xmlRpcReq.getConfig();
- LocalDispatcher dispatcher = config.getDispatcher();
-
- ModelService model;
- try {
- model =
dispatcher.getDispatchContext().getModelService(xmlRpcReq.getMethodName());
- } catch (GenericServiceException e) {
- throw new XmlRpcException(e.getMessage(), e);
- }
-
- if (model != null && model.isAuth()) {
- String username = config.getBasicUserName();
- String password = config.getBasicPassword();
-
- // check the account
- Map<String, Object> context = new HashMap<>();
- context.put("login.username", username);
- context.put("login.password", password);
-
- Map<String, Object> resp;
- try {
- resp = dispatcher.runSync("userLogin", context);
- } catch (GenericServiceException e) {
- throw new XmlRpcException(e.getMessage(), e);
- }
-
- if (ServiceUtil.isError(resp)) {
- return false;
- }
- }
-
- return true;
- }
- }
-
- @Override
- public void execute(XmlRpcStreamRequestConfig pConfig,
ServerStreamConnection pConnection) throws XmlRpcException {
- try {
- Object result = null;
- boolean foundError = false;
-
- try (InputStream istream = getInputStream(pConfig, pConnection)) {
- XmlRpcRequest request = getRequest(pConfig, istream);
- result = execute(request);
- } catch (Exception e) {
- Debug.logError(e, MODULE);
- foundError = true;
- }
-
- ByteArrayOutputStream baos;
- OutputStream initialStream;
- if (isContentLengthRequired(pConfig)) {
- baos = new ByteArrayOutputStream();
- initialStream = baos;
- } else {
- baos = null;
- initialStream = pConnection.newOutputStream();
- }
-
- try (OutputStream ostream = getOutputStream(pConnection, pConfig,
initialStream)) {
- if (!foundError) {
- writeResponse(pConfig, ostream, result);
- } else {
- writeError(pConfig, ostream,
- new Exception("Failed to read XML-RPC request.
Please check logs for more information"));
- }
- }
-
- if (baos != null) {
- try (OutputStream dest = getOutputStream(pConfig, pConnection,
baos.size())) {
- baos.writeTo(dest);
- }
- }
-
- pConnection.close();
- pConnection = null;
- } catch (IOException e) {
- throw new XmlRpcException("I/O error while processing request: " +
e.getMessage(), e);
- } finally {
- if (pConnection != null) {
- try {
- pConnection.close();
- } catch (IOException e) {
- Debug.logError(e, "Unable to close stream connection");
- }
- }
- }
- }
-
- @Override
- protected XmlRpcRequest getRequest(final XmlRpcStreamRequestConfig
pConfig, InputStream pStream)
- throws XmlRpcException {
- final XmlRpcRequestParser parser = new XmlRpcRequestParser(pConfig,
getTypeFactory());
- final XMLReader xr = SAXParsers.newXMLReader();
- xr.setContentHandler(parser);
- try {
-
xr.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
-
xr.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",
false);
-
xr.setFeature("http://xml.org/sax/features/external-general-entities", false);
-
xr.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
- xr.parse(new InputSource(pStream));
- } catch (SAXException | IOException e) {
- throw new XmlRpcException("Failed to parse / read XML-RPC request:
" + e.getMessage(), e);
- }
- final List<?> params = parser.getParams();
- return new XmlRpcRequest() {
- @Override
- public XmlRpcRequestConfig getConfig() {
- return pConfig;
- }
- @Override
- public String getMethodName() {
- return parser.getMethodName();
- }
- @Override
- public int getParameterCount() {
- return params == null ? 0 : params.size();
- }
- @Override
- public Object getParameter(int pIndex) {
- return params.get(pIndex);
- }
- };
- }
-
- class ServiceRpcHandler extends AbstractReflectiveHandlerMapping
implements XmlRpcHandler {
-
- ServiceRpcHandler() {
- this.setAuthenticationHandler(new OfbizRpcAuthHandler());
- }
-
- @Override
- public XmlRpcHandler getHandler(String method) throws
XmlRpcNoSuchHandlerException, XmlRpcException {
- ModelService model = null;
- try {
- model =
dispatcher.getDispatchContext().getModelService(method);
- } catch (GenericServiceException e) {
- Debug.logWarning(e, MODULE);
- }
- if (model == null) {
- throw new XmlRpcNoSuchHandlerException("No such service [" +
method + "]");
- }
- return this;
- }
-
- @Override
- public Object execute(XmlRpcRequest xmlRpcReq) throws XmlRpcException {
-
- OFBizXmlRpcHttpRequestConfigImpl requestConfig =
(OFBizXmlRpcHttpRequestConfigImpl) xmlRpcReq.getConfig();
- LocalDispatcher dispatcher = requestConfig.getDispatcher();
-
- DispatchContext dctx = dispatcher.getDispatchContext();
- String serviceName = xmlRpcReq.getMethodName();
- ModelService model = null;
- try {
- model = dctx.getModelService(serviceName);
- } catch (GenericServiceException e) {
- throw new XmlRpcException(e.getMessage(), e);
- }
-
- // check remote invocation security
- if (model == null || !model.isExport()) {
- throw new XmlRpcException("Unknown method");
- }
-
- // prepare the context -- single parameter type struct (map)
- Map<String, Object> context = this.getContext(xmlRpcReq,
serviceName);
-
- // add in auth parameters
- XmlRpcHttpRequestConfig config = (XmlRpcHttpRequestConfig)
xmlRpcReq.getConfig();
- String username = config.getBasicUserName();
- String password = config.getBasicPassword();
- if (UtilValidate.isNotEmpty(username)) {
- context.put("login.username", username);
- context.put("login.password", password);
- }
-
- // add the locale to the context
- if (context.get("locale") == null) {
- context.put("locale", Locale.getDefault());
- }
-
- // invoke the service
- Map<String, Object> resp;
- try {
- resp = dispatcher.runSync(serviceName, context);
- } catch (GenericServiceException e) {
- throw new XmlRpcException(e.getMessage(), e);
- }
- if (ServiceUtil.isError(resp)) {
- Debug.logError(ServiceUtil.getErrorMessage(resp), MODULE);
- throw new XmlRpcException(ServiceUtil.getErrorMessage(resp));
- }
-
- // return only definied parameters
- return model.makeValid(resp, ModelService.OUT_PARAM, false, null);
- }
-
- protected Map<String, Object> getContext(XmlRpcRequest xmlRpcReq,
String serviceName) throws XmlRpcException {
- ModelService model;
- OFBizXmlRpcHttpRequestConfigImpl requestConfig =
(OFBizXmlRpcHttpRequestConfigImpl) xmlRpcReq.getConfig();
- LocalDispatcher dispatcher = requestConfig.getDispatcher();
- try {
- model =
dispatcher.getDispatchContext().getModelService(serviceName);
- } catch (GenericServiceException e) {
- throw new XmlRpcException(e.getMessage(), e);
- }
-
- // context placeholder
- Map<String, Object> context = new HashMap<>();
-
- if (model != null) {
- int parameterCount = xmlRpcReq.getParameterCount();
-
- // more than one parameter; use list notation based on service
def order
- if (parameterCount > 1) {
- int x = 0;
- for (String name:
model.getParameterNames(ModelService.IN_PARAM, true, true)) {
- context.put(name, xmlRpcReq.getParameter(x));
- x++;
-
- if (x == parameterCount) {
- break;
- }
- }
-
- // only one parameter; if its a map use it as the context;
- // otherwise make sure the service takes one param.
- } else if (parameterCount == 1) {
- Object param = xmlRpcReq.getParameter(0);
- if (param instanceof Map<?, ?>) {
- context = checkMap(param, String.class, Object.class);
- } else if (model.getDefinedInCount() == 1) {
- String paramName =
model.getInParamNames().iterator().next();
- context.put(paramName, xmlRpcReq.getParameter(0));
- } else {
- throw new XmlRpcException(
- "More than one parameter defined on service;
cannot call via RPC with parameter list");
- }
- }
-
- // do map value conversions
- context = model.makeValid(context, ModelService.IN_PARAM);
- }
-
- return context;
- }
- }
-
- class HttpStreamConnection implements ServerStreamConnection {
-
- private HttpServletRequest request;
- private HttpServletResponse response;
-
- protected HttpStreamConnection(HttpServletRequest req,
HttpServletResponse res) {
- this.request = req;
- this.response = res;
- }
-
- public HttpServletRequest getRequest() {
- return request;
- }
-
- public HttpServletResponse getResponse() {
- return response;
- }
-
- @Override
- public InputStream newInputStream() throws IOException {
- return request.getInputStream();
- }
-
- @Override
- public OutputStream newOutputStream() throws IOException {
- response.setContentType("text/xml");
- return response.getOutputStream();
- }
-
- @Override
- public void close() throws IOException {
- response.getOutputStream().close();
- }
- }
-
- class OFBizXmlRpcHttpRequestConfigImpl extends XmlRpcHttpRequestConfigImpl
{
- private LocalDispatcher dispatcher;
-
- OFBizXmlRpcHttpRequestConfigImpl(HttpServletRequest request) {
- dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
- }
-
- public LocalDispatcher getDispatcher() {
- return dispatcher;
- }
- }
-}
diff --git a/framework/webapp/testdef/webapptests.xml
b/framework/webapp/testdef/webapptests.xml
index bc37508032..f33f498994 100644
--- a/framework/webapp/testdef/webapptests.xml
+++ b/framework/webapp/testdef/webapptests.xml
@@ -21,7 +21,4 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://ofbiz.apache.org/dtds/test-suite.xsd">
- <test-case case-name="webapp-tests">
- <junit-test-suite
class-name="org.apache.ofbiz.webapp.test.XmlRpcTests"/>
- </test-case>
</test-suite>
diff --git a/framework/webtools/webapp/webtools/WEB-INF/controller.xml
b/framework/webtools/webapp/webtools/WEB-INF/controller.xml
index 43683ad7cf..65069b85eb 100644
--- a/framework/webtools/webapp/webtools/WEB-INF/controller.xml
+++ b/framework/webtools/webapp/webtools/WEB-INF/controller.xml
@@ -98,13 +98,6 @@ under the License.
<response name="error" type="none"/>
<response name="success" type="none"/>
</request-map> -->
- <request-map uri="xmlrpc" track-serverhit="false" track-visit="false">
- <security auth="true"/>
- <event type="xmlrpc"/>
- <response name="error" type="none"/>
- <response name="success" type="none"/>
- </request-map>
-
<request-map uri="ping">
<security auth="true"/>
<event type="service" invoke="ping"/>
diff --git a/framework/webtools/webapp/webtools/WEB-INF/web.xml
b/framework/webtools/webapp/webtools/WEB-INF/web.xml
index d574622996..8b28c94384 100644
--- a/framework/webtools/webapp/webtools/WEB-INF/web.xml
+++ b/framework/webtools/webapp/webtools/WEB-INF/web.xml
@@ -33,10 +33,6 @@ under the License.
<param-value>webtools</param-value>
<!--<description>A unique name used to identify/recognize the local
dispatcher for the Service Engine</description>-->
</context-param>
- <context-param>
- <param-name>xmlrpc.enabledForExtensions</param-name>
- <param-value>true</param-value>
- </context-param>
<context-param>
<description>The location of the main-decorator screen to use for this
webapp; referred to as a context variable
in screen def XML files.