public static XMLType xmlPi(String name, String content) { int start = 0; char[] chars = content.toCharArray(); while (start < chars.length && chars[start] == ' ') { start++; } XMLType result = new XMLType(new SQLXMLImpl("<?" + name + " " + content.substring(start) + "?>")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ result.setType(Type.PI); return result; }
private static XMLEventReader getXMLEventReader(StAXSource source) throws XMLStreamException { XMLEventReader reader = source.getXMLEventReader(); if (reader == null) { XMLInputFactory inputFactory = XMLType.getXmlInputFactory(); reader = inputFactory.createXMLEventReader(source.getXMLStreamReader()); } return reader; }
public String getEncoding() { if (encoding == null) { this.encoding = getEncoding(this); } return encoding; }
@Override protected Object readObject(ObjectInput in, List<Object> cache, byte version) throws IOException, ClassNotFoundException { XMLType xt = new XMLType(); xt.readExternal(in, (byte)1); return xt; } }
@Override public StAXSource getStaxSource() throws SQLException { try { XMLEventReader eventReader = getXMLEventReader(v.getSource(StAXSource.class)); eventReader = XMLType.getXmlInputFactory().createFilteredReader(eventReader, declarationOmittingFilter); return new StAXSource(eventReader); } catch (XMLStreamException e) { throw new SQLException(e); } } };
public static Object serialize(XMLSerialize xs, XMLType value) throws TransformationException { Type type = value.getType(); final Charset encoding; if (xs.getEncoding() != null) { value = new XMLType(new StAXSQLXML(sourceProvider, encoding)); value.setType(type); value = new XMLType(new StAXSQLXML(sourceProvider, encoding)); value.setType(Type.DOCUMENT); try { InputStream is = null; if (!Charset.forName(value.getEncoding()).equals(encoding)) { is = new ReaderInputStream(value.getCharacterStream(), encoding); } else { is = value.getBinaryStream(); if (!Charset.forName(value.getEncoding()).equals(encoding)) {
int read = -1; if (r == null) { r = xml.getCharacterStream(); case DOCUMENT: //filter the doc declaration XMLEventReader eventReader = null; XMLInputFactory inputFactory = XMLType.getXmlInputFactory(); if (r != null) { if (!(r instanceof BufferedReader)) { StAXSource staxSource = xml.getSource(StAXSource.class); eventReader = staxSource.getXMLEventReader(); if (eventReader == null) { case TEXT: if (r == null) { r = xml.getCharacterStream();
@Test public void testReferencePersistence() throws Exception { String testString = "<foo>this is an xml value test</foo>"; //$NON-NLS-1$ SQLXMLImpl xml = new SQLXMLImpl(testString); XMLType xv = new XMLType(xml); xv.setReferenceStreamId(null); // now force to serialize XMLType read = UnitTestUtil.helpSerialize(xv); assertEquals(testString, read.getString()); }
@Test public void testXMLValuePersistence() throws Exception { String testString = "<foo>this is an xml value test</foo>"; //$NON-NLS-1$ SQLXMLImpl xml = new SQLXMLImpl(testString); XMLType xv = new XMLType(xml); String key = xv.getReferenceStreamId(); // now force to serialize XMLType read = UnitTestUtil.helpSerialize(xv); // make sure we have kept the reference stream id assertEquals(key, read.getReferenceStreamId()); // and lost the original object assertNull(read.getReference()); }
private Object evaluateXMLSerialize(List<?> tuple, XMLSerialize xs) throws ExpressionEvaluationException, BlockedException, TeiidComponentException, FunctionExecutionException { XMLType value = (XMLType) internalEvaluate(xs.getExpression(), tuple); if (value == null) { return null; } try { if (!xs.isDocument()) { return XMLSystemFunctions.serialize(xs, value); } if (value.getType() == Type.UNKNOWN) { Type type = StringToSQLXMLTransform.isXml(value.getCharacterStream()); value.setType(type); } if (value.getType() == Type.DOCUMENT || value.getType() == Type.ELEMENT) { return XMLSystemFunctions.serialize(xs, value); } } catch (SQLException e) { throw new FunctionExecutionException(QueryPlugin.Event.TEIID30334, e); } catch (TransformationException e) { throw new FunctionExecutionException(QueryPlugin.Event.TEIID30335, e); } throw new FunctionExecutionException(QueryPlugin.Event.TEIID30336, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30336)); }
if (doc != null && doc.isFinished()) { this.env.setDocumentInProgress(null); XMLType xml = new XMLType(doc.getSQLXML()); reader = xml.getCharacterStream(); } catch (SQLException e) { throw new TeiidComponentException(QueryPlugin.Event.TEIID30194, e);
@Test public void testLength() throws Exception { String testString = "<foo>this is an xml value test</foo>"; //$NON-NLS-1$ SQLXMLImpl xml = new SQLXMLImpl(testString); XMLType xv = new XMLType(xml); assertEquals(36, xv.length()); xml = new SQLXMLImpl(new InputStreamFactory() { @Override public InputStream getInputStream() throws IOException { return new ByteArrayInputStream("<bar/>".getBytes(Streamable.CHARSET)); } }); xv = new XMLType(xml); try { xv.length(); fail(); } catch (SQLException e) { } } }
@Test public void testXML() throws Exception { StatementImpl statement = createMockStatement(ResultSet.TYPE_FORWARD_ONLY); ResultsFuture<LobChunk> future = new ResultsFuture<LobChunk>(); future.getResultsReceiver().receiveResults(new LobChunk("<a/>".getBytes(Charset.forName("UTF-8")), true)); XMLType result = new XMLType(); Mockito.stub(statement.getDQP().requestNextLobChunk(0, 0, result.getReferenceStreamId())).toReturn(future); ResultsMessage resultsMsg = new ResultsMessage(); result.setEncoding("UTF-8"); resultsMsg.setResults(new List<?>[] {Arrays.asList(result)}); resultsMsg.setLastRow(1); resultsMsg.setFirstRow(1); resultsMsg.setFinalRow(1); resultsMsg.setColumnNames(new String[] {"x"}); //$NON-NLS-1$ resultsMsg.setDataTypes(new String[] {"xml"}); //$NON-NLS-1$ ResultSetImpl cs = new ResultSetImpl(resultsMsg, statement); cs.next(); assertEquals("<a/>", cs.getString(1)); }
public static Object evaluate(XMLType value, XMLCast expression, CommandContext context) throws ExpressionEvaluationException { Configuration config = new Configuration(); Type t = value.getType(); try { Item i = null; throw new FunctionExecutionException(); case TEXT: i = new StringValue(value.getString()); break; case UNKNOWN: case DOCUMENT: case ELEMENT: StreamSource ss = value.getSource(StreamSource.class); try { i = config.buildDocument(ss);
private InputStream handleResult(String charSet, Object result) throws SQLException { if (result == null) { return null; //or should this be an empty result? } if (result instanceof SQLXML) { if (charSet != null) { XMLSerialize serialize = new XMLSerialize(); serialize.setTypeString("blob"); //$NON-NLS-1$ serialize.setDeclaration(true); serialize.setEncoding(charSet); serialize.setDocument(true); try { return ((BlobType)XMLSystemFunctions.serialize(serialize, new XMLType((SQLXML)result))).getBinaryStream(); } catch (TransformationException e) { throw new SQLException(e); } } return ((SQLXML)result).getBinaryStream(); } else if (result instanceof Blob) { return ((Blob)result).getBinaryStream(); } else if (result instanceof Clob) { return new ReaderInputStream(((Clob)result).getCharacterStream(), charSet==null?Charset.defaultCharset():Charset.forName(charSet)); } return new ByteArrayInputStream(result.toString().getBytes(charSet==null?Charset.defaultCharset():Charset.forName(charSet))); }
@Test public void testTypeConversion() throws Exception { BufferManager bm = BufferManagerFactory.getStandaloneBufferManager(); String str = "hello world"; Object source = new StreamSource(new StringReader(str)); XMLType xml = (XMLType) ConnectorWorkItem.convertToRuntimeType(bm, source, DataTypeManager.DefaultDataClasses.XML, null); assertEquals(str, xml.getString()); source = new StAXSource(XMLType.getXmlInputFactory().createXMLEventReader(new StringReader("<a/>"))); xml = (XMLType) ConnectorWorkItem.convertToRuntimeType(bm, source, DataTypeManager.DefaultDataClasses.XML, null); XMLInputFactory in = XMLType.getXmlInputFactory(); XMLStreamReader reader = in.createXMLStreamReader(new StringReader(xml.getString())); assertEquals(XMLEvent.START_DOCUMENT, reader.getEventType()); assertEquals(XMLEvent.START_ELEMENT, reader.next()); assertEquals("a", reader.getLocalName()); assertEquals(XMLEvent.END_ELEMENT, reader.next()); byte[] bytes = str.getBytes(Streamable.ENCODING); source = new InputStreamFactory.BlobInputStreamFactory(BlobType.createBlob(bytes)); BlobType blob = (BlobType) ConnectorWorkItem.convertToRuntimeType(bm, source, DataTypeManager.DefaultDataClasses.BLOB, null); assertArrayEquals(bytes, ObjectConverterUtil.convertToByteArray(blob.getBinaryStream())); }
} else { XMLType x = (XMLType)lob; String s = x.getString(); x.setReference(new SQLXMLImpl(s)); ((XMLType)lob).setReference(new SQLXMLImpl(isf));
@Test public void testGoodElement() throws Exception { String xml = "<customer>\n" + //$NON-NLS-1$ "<name>ABC</name>" + //$NON-NLS-1$ "<age>32</age>" + //$NON-NLS-1$ "</customer>"; //$NON-NLS-1$ StringToSQLXMLTransform transform = new StringToSQLXMLTransform(); XMLType xmlValue = (XMLType)transform.transformDirect(xml); assertEquals(xml.replaceAll("[\r]", ""), xmlValue.getString().replaceAll("[\r]", "")); assertEquals(XMLType.Type.ELEMENT, xmlValue.getType()); }
/** * This method transforms a value of the source type into a value * of the target type. * @param value Incoming value of source type * @return Outgoing value of target type * @throws TransformationException if value is an incorrect input type or * the transformation fails */ public Object transformDirect(Object value) throws TransformationException { XMLType source = (XMLType)value; Reader reader = null; try { char[] result = new char[DataTypeManager.MAX_STRING_LENGTH]; reader = source.getCharacterStream(); int read = reader.read(result); return new String(result, 0, read); } catch (SQLException e) { throw new TransformationException(CorePlugin.Event.TEIID10080, e, CorePlugin.Util.gs(CorePlugin.Event.TEIID10080, new Object[] {getSourceType().getName(), getTargetType().getName()})); } catch (IOException e) { throw new TransformationException(CorePlugin.Event.TEIID10080, e, CorePlugin.Util.gs(CorePlugin.Event.TEIID10080, new Object[] {getSourceType().getName(), getTargetType().getName()})); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { } } }