1
package com.eucalyptus.util;
3
import java.io.ByteArrayInputStream;
4
import java.io.InputStream;
5
import java.util.concurrent.TimeUnit;
6
import java.util.concurrent.locks.Condition;
7
import java.util.concurrent.locks.Lock;
8
import java.util.concurrent.locks.ReentrantLock;
10
import javax.xml.stream.XMLInputFactory;
11
import javax.xml.stream.XMLOutputFactory;
12
import javax.xml.stream.XMLStreamException;
13
import javax.xml.stream.XMLStreamReader;
15
import org.apache.axiom.om.OMAbstractFactory;
16
import org.apache.axiom.om.OMException;
17
import org.apache.axiom.om.OMFactory;
18
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
19
import org.apache.axiom.om.impl.dom.DOOMAbstractFactory;
20
import org.apache.axiom.soap.SOAPFactory;
22
public class HoldMe implements Lock {
23
public static final String OM_FACTORY_NAME_PROPERTY = "om.factory";
24
public static final String SOAP11_FACTORY_NAME_PROPERTY = "soap11.factory";
25
public static final String SOAP12_FACTORY_NAME_PROPERTY = "soap12.factory";
26
private static final String DEFAULT_OM_FACTORY_CLASS_NAME = "org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory";
27
private static final String DEFAULT_SOAP11_FACTORY_CLASS_NAME = "org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory";
28
private static final String DEFAULT_SOAP12_FACTORY_CLASS_NAME = "org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory";
30
System.setProperty("javax.xml.stream.XMLInputFactory","com.ctc.wstx.stax.WstxInputFactory");
31
System.setProperty("javax.xml.stream.XMLOutputFactory","com.ctc.wstx.stax.WstxOutputFactory");
32
System.setProperty("javax.xml.stream.XMLEventFactory","com.ctc.wstx.stax.WstxEventFactory");
34
private static XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance( );
35
private static XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance( );
37
public static Lock canHas = maybeGetLock( );
38
public static boolean reuse = true;
41
public void lock( ) {}
43
private static Lock maybeGetLock( ) {
45
// return new ReentrantLock( );
53
public void lockInterruptibly( ) throws InterruptedException {}
56
public Condition newCondition( ) {
61
public boolean tryLock( ) {
66
public boolean tryLock( long arg0, TimeUnit arg1 ) throws InterruptedException {
71
public void unlock( ) {}
73
public static OMFactory getDOOMFactory( ) {
74
if ( reuse ) return DOOMAbstractFactory.getOMFactory( );
75
else return new org.apache.axiom.om.impl.dom.factory.OMDOMFactory( );
78
public static SOAPFactory getDOOMSOAP11Factory( ) {
79
if ( reuse ) return DOOMAbstractFactory.getSOAP11Factory( );
80
else return new org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory( );
83
public static SOAPFactory getDOOMSOAP12Factory( ) {
84
if ( reuse ) return DOOMAbstractFactory.getSOAP12Factory( );
85
else return new org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory( );
88
public static SOAPFactory getOMSOAP11Factory( ) {
89
if ( reuse ) return OMAbstractFactory.getSOAP11Factory( );
92
omFactory = System.getProperty( SOAP11_FACTORY_NAME_PROPERTY );
93
if ( omFactory == null || "".equals( omFactory ) ) {
94
omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME;
96
} catch ( SecurityException e ) {
97
omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME;
99
SOAPFactory defaultSOAP11OMFactory;
101
defaultSOAP11OMFactory = ( SOAPFactory ) Class.forName( omFactory ).newInstance( );
102
} catch ( InstantiationException e ) {
103
throw new OMException( e );
104
} catch ( IllegalAccessException e ) {
105
throw new OMException( e );
106
} catch ( ClassNotFoundException e ) {
107
throw new OMException( e );
109
return defaultSOAP11OMFactory;
112
public static SOAPFactory getOMSOAP12Factory( ) {
113
if ( reuse ) return OMAbstractFactory.getSOAP12Factory( );
116
omFactory = System.getProperty( SOAP12_FACTORY_NAME_PROPERTY );
117
if ( omFactory == null || "".equals( omFactory ) ) {
118
omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME;
120
} catch ( SecurityException e ) {
121
omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME;
124
SOAPFactory defaultSOAP12OMFactory;
126
defaultSOAP12OMFactory = ( SOAPFactory ) Class.forName( omFactory ).newInstance( );
127
} catch ( InstantiationException e ) {
128
throw new OMException( e );
129
} catch ( IllegalAccessException e ) {
130
throw new OMException( e );
131
} catch ( ClassNotFoundException e ) {
132
throw new OMException( e );
134
return defaultSOAP12OMFactory;
137
public static OMFactory getOMFactory( ) {
138
if ( reuse ) return OMAbstractFactory.getOMFactory( );
141
omFactory = System.getProperty( OM_FACTORY_NAME_PROPERTY );
142
if ( omFactory == null || "".equals( omFactory ) ) {
143
omFactory = DEFAULT_OM_FACTORY_CLASS_NAME;
145
} catch ( SecurityException e ) {
146
omFactory = DEFAULT_OM_FACTORY_CLASS_NAME;
149
OMFactory defaultOMFactory;
151
defaultOMFactory = ( OMFactory ) Class.forName( omFactory ).newInstance( );
152
} catch ( InstantiationException e ) {
153
throw new OMException( e );
154
} catch ( IllegalAccessException e ) {
155
throw new OMException( e );
156
} catch ( ClassNotFoundException e ) {
157
throw new OMException( e );
159
return defaultOMFactory;
162
public static class ThrowAwayStAXOMBuilder extends StAXOMBuilder {
164
public ThrowAwayStAXOMBuilder( XMLStreamReader parser ) {
165
super( HoldMe.getOMFactory( ), parser );
168
public ThrowAwayStAXOMBuilder( OMFactory doomFactory, XMLStreamReader parser ) {
169
super( doomFactory, parser );
173
public static StAXOMBuilder getStAXOMBuilder( XMLStreamReader parser ) {
174
if ( reuse ) return new StAXOMBuilder( parser );
175
else return new ThrowAwayStAXOMBuilder( parser );
178
public static StAXOMBuilder getStAXOMBuilder( OMFactory doomFactory, XMLStreamReader xmlStreamReader ) {
179
if ( reuse ) return new StAXOMBuilder( doomFactory, xmlStreamReader );
180
else return new ThrowAwayStAXOMBuilder( doomFactory, xmlStreamReader );
183
public static XMLStreamReader getXMLStreamReader( InputStream in ) throws XMLStreamException {
184
return HoldMe.getXMLInputFactory( ).createXMLStreamReader( in );
187
public static XMLStreamReader getXMLStreamReader( String text ) throws XMLStreamException {
188
return HoldMe.getXMLInputFactory( ).createXMLStreamReader( new ByteArrayInputStream( text.getBytes( ) ) );
191
public static XMLInputFactory getXMLInputFactory( ) {
192
return reuse?xmlInputFactory:XMLInputFactory.newInstance( );
195
public static XMLOutputFactory getXMLOutputFactory( ) {
196
return reuse?xmlOutputFactory:XMLOutputFactory.newInstance( );