From afe1a40f3e07514c2a4b0e61054d1b65d8c22ba5 Mon Sep 17 00:00:00 2001 From: David Walluck Date: Wed, 19 Aug 2026 14:30:34 -0400 Subject: [PATCH] Close underlying Reader in XmlRpcParser --- .../org/commonjava/rwx/api/RWXMapper.java | 7 +- .../org/commonjava/rwx/core/XmlRpcParser.java | 16 +++- .../commonjava/rwx/core/XmlRpcParserTest.java | 86 +++++++++++++------ 3 files changed, 78 insertions(+), 31 deletions(-) diff --git a/rwx/src/main/java/org/commonjava/rwx/api/RWXMapper.java b/rwx/src/main/java/org/commonjava/rwx/api/RWXMapper.java index 0e3ced0..bb83bf5 100644 --- a/rwx/src/main/java/org/commonjava/rwx/api/RWXMapper.java +++ b/rwx/src/main/java/org/commonjava/rwx/api/RWXMapper.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2010 Red Hat, Inc. (http://github.com/Commonjava/commonjava) * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -56,9 +56,8 @@ public String render( Object obj ) throws XmlRpcException */ public T parse( InputStream stream, Class type ) throws XmlRpcException { - final XmlRpcParser xmlRpcParser = new XmlRpcParser( stream ); - RpcObject rpcObject; - try + final RpcObject rpcObject; + try ( XmlRpcParser xmlRpcParser = new XmlRpcParser( stream ) ) { rpcObject = xmlRpcParser.parse(); } diff --git a/rwx/src/main/java/org/commonjava/rwx/core/XmlRpcParser.java b/rwx/src/main/java/org/commonjava/rwx/core/XmlRpcParser.java index 3cb1e73..6548979 100644 --- a/rwx/src/main/java/org/commonjava/rwx/core/XmlRpcParser.java +++ b/rwx/src/main/java/org/commonjava/rwx/core/XmlRpcParser.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2010 Red Hat, Inc. (http://github.com/Commonjava/commonjava) * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -46,7 +46,7 @@ * * Created by ruhan on 7/13/17. */ -public class XmlRpcParser +public class XmlRpcParser implements AutoCloseable { private final Logger logger = LoggerFactory.getLogger( getClass() ); @@ -67,6 +67,18 @@ public XmlRpcParser( final InputStream in ) throws XmlRpcException } } + /** + * Frees any resources associated with this Reader. This method does not close the + * underlying input source. + * + * @throws XMLStreamException if there are errors freeing associated resources + */ + @Override + public void close() throws XMLStreamException + { + reader.close(); + } + /** * Parse method request or response. XML-RPC response has either fault or params element. * @return diff --git a/rwx/src/test/java/org/commonjava/rwx/core/XmlRpcParserTest.java b/rwx/src/test/java/org/commonjava/rwx/core/XmlRpcParserTest.java index 9c2a867..718a2d9 100644 --- a/rwx/src/test/java/org/commonjava/rwx/core/XmlRpcParserTest.java +++ b/rwx/src/test/java/org/commonjava/rwx/core/XmlRpcParserTest.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (C) 2010 Red Hat, Inc. (http://github.com/Commonjava/commonjava) * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,8 +40,11 @@ public class XmlRpcParserTest @Test public void simpleRequestTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleRequest" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleRequest" ) ) ) + { + object = parser.parse(); + } assertTrue( object instanceof MethodCall ); @@ -54,8 +57,11 @@ public void simpleRequestTest() throws XMLStreamException, XmlRpcException @Test public void requestWithOneParamTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneParam" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneParam" ) ) ) + { + object = parser.parse(); + } MethodCall request = (MethodCall) object; List params = request.getParams(); @@ -70,8 +76,11 @@ public void requestWithOneParamTest() throws XMLStreamException, XmlRpcException @Test public void requestWithOneStructParamTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneStructParam" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneStructParam" ) ) ) + { + object = parser.parse(); + } MethodCall request = (MethodCall) object; List params = request.getParams(); @@ -91,8 +100,11 @@ public void requestWithOneStructParamTest() throws XMLStreamException, XmlRpcExc @Test public void requestWithOneArrayParamTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneArrayParam" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithOneArrayParam" ) ) ) + { + object = parser.parse(); + } MethodCall request = (MethodCall) object; List params = request.getParams(); @@ -112,8 +124,11 @@ public void requestWithOneArrayParamTest() throws XMLStreamException, XmlRpcExce @Test public void requestWithArrayInStructTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithArrayInStruct" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "requestWithArrayInStruct" ) ) ) + { + object = parser.parse(); + } MethodCall request = (MethodCall) object; List params = request.getParams(); @@ -135,8 +150,11 @@ public void requestWithArrayInStructTest() throws XMLStreamException, XmlRpcExce @Test public void kojiMulticallRequestTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiMulticallRequest" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiMulticallRequest" ) ) ) + { + object = parser.parse(); + } String nvr = "org.dashbuilder-dashbuilder-parent-metadata-0.4.0.Final-1"; @@ -162,8 +180,11 @@ public void kojiMulticallRequestTest() throws XMLStreamException, XmlRpcExceptio @Test public void simpleResponseTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleResponse" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleResponse" ) ) ) + { + object = parser.parse(); + } assertTrue( object instanceof MethodResponse ); @@ -180,8 +201,11 @@ public void simpleResponseTest() throws XMLStreamException, XmlRpcException @Test public void simpleFaultResponseTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleFault" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "simpleFault" ) ) ) + { + object = parser.parse(); + } assertTrue( object instanceof Fault ); @@ -204,8 +228,11 @@ public void simpleFaultResponseTest() throws XMLStreamException, XmlRpcException @Test public void jiraServerInfoTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "jiraServerInfoResponse" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "jiraServerInfoResponse" ) ) ) + { + object = parser.parse(); + } MethodResponse response = (MethodResponse) object; @@ -223,8 +250,11 @@ public void jiraServerInfoTest() throws XMLStreamException, XmlRpcException @Test public void kojiGetBuildResponseTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiGetBuildResponse" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiGetBuildResponse" ) ) ) + { + object = parser.parse(); + } MethodResponse response = (MethodResponse) object; @@ -243,8 +273,11 @@ public void kojiGetBuildResponseTest() throws XMLStreamException, XmlRpcExceptio @Test public void kojiMulticallResponseTest() throws XMLStreamException, XmlRpcException { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiMulticallResponse" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiMulticallResponse" ) ) ) + { + object = parser.parse(); + } MethodResponse response = (MethodResponse) object; @@ -283,8 +316,11 @@ public void kojiMulticallResponseTest() throws XMLStreamException, XmlRpcExcepti @Test public void kojiGetBuildTypeNilResponseTest() throws Exception { - final XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiGetBuildTypeNilResponse" ) ); - Object object = parser.parse(); + final Object object; + try ( XmlRpcParser parser = new XmlRpcParser( getXMLStream( "kojiGetBuildTypeNilResponse" ) ) ) + { + object = parser.parse(); + } MethodResponse response = (MethodResponse) object;