WbxmlSerializer.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:4k
- /*
- * Copyright (C) 2007 Esmertec AG.
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed 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 com.android.im.imps;
- import java.io.IOException;
- import java.io.OutputStream;
- import com.android.im.imps.ImpsConstants.ImpsVersion;
- /*
- * NOT thread-safe. Always use this in one thread.
- */
- final class WbxmlSerializer {
- private OutputStream mOut;
- private int mNativeHandle;
- private static int PUBLIC_ID_IMPS_12 = 0x11;
- private static int PUBLIC_ID_IMPS_13 = 0x12;
- public WbxmlSerializer(ImpsVersion impsVersion) {
- if (impsVersion == ImpsVersion.IMPS_VERSION_12) {
- mNativeHandle = nativeCreate(PUBLIC_ID_IMPS_12);
- } else if (impsVersion == ImpsVersion.IMPS_VERSION_13) {
- mNativeHandle = nativeCreate(PUBLIC_ID_IMPS_13);
- } else {
- throw new IllegalArgumentException("Unsupported IMPS version");
- }
- if (mNativeHandle == 0) {
- throw new OutOfMemoryError();
- }
- }
- @Override
- protected void finalize() {
- if (mNativeHandle != 0) {
- nativeRelease(mNativeHandle);
- }
- }
- public void reset() {
- nativeReset(mNativeHandle);
- mOut = null;
- }
- public void setOutput(OutputStream out) {
- mOut = out;
- }
- // XXX: These should throw ParserException but the dalvik seems to have
- // problem throwing non-system exceptions from JNI code. Use IAE for now
- // and file a bug report for this.
- public void startElement(String name, String[] atts) throws IOException,
- SerializerException {
- try {
- nativeStartElement(mNativeHandle, name, atts);
- } catch (IllegalArgumentException e) {
- throw new SerializerException(e);
- }
- }
- public void characters(String chars) throws IOException, SerializerException {
- try {
- nativeCharacters(mNativeHandle, chars);
- } catch (IllegalArgumentException e) {
- throw new SerializerException(e);
- }
- }
- public void endElement() throws IOException, SerializerException {
- try {
- nativeEndElement(mNativeHandle);
- } catch (IllegalArgumentException e) {
- throw new SerializerException(e);
- }
- }
- /**
- * Called by native encoder to send result data.
- * @param data
- * @param len
- * @throws IOException
- */
- void onWbxmlData(byte[] data, int len) throws IOException {
- if (mOut != null) {
- mOut.write(data, 0, len);
- }
- }
- native int nativeCreate(int publicId);
- native void nativeReset(int nativeHandle);
- native void nativeRelease(int nativeHandle);
- // FIXME: These should throw ParserException but the dalvik seems to have
- // problem throwing non-system exceptions from JNI code. Use IAE for now
- // and file a bug report for this.
- native void nativeStartElement(int nativeHandle, String name, String[] atts)
- throws IOException, IllegalArgumentException;
- native void nativeCharacters(int nativeHandle, String characters)
- throws IOException, IllegalArgumentException;
- native void nativeEndElement(int nativeHandle)
- throws IOException, IllegalArgumentException;
- static {
- try {
- System.loadLibrary("wbxml_jni");
- }catch(UnsatisfiedLinkError ule) {
- System.err.println("WARNING: Could not load library libwbxml_jni.so");
- }
- }
- }