eXistDB简单通讯08(HTTP_REST)

  • 保存文件
  • 取回文件
  • 查询

1、GetFileHTTP.java

package com.neohope.existdb.test;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


public class GetFileHTTP {
    public static void GetXML(String fileId) throws IOException {
        URL url = new URL("http://localhost:8080/exist/rest/db/CDA/" + fileId);
        System.out.println("GET file from " + url.toString());

        HttpURLConnection connect = (HttpURLConnection) url.openConnection();
        connect.setRequestMethod("GET");
        connect.connect();
        System.out.println("Result:");

        BufferedReader bis = new BufferedReader(new InputStreamReader(connect.getInputStream()));
        String line;
        while ((line = bis.readLine()) != null) {
            System.out.println(line);
        }
    }

    public static void main(String[] args) throws IOException {
        GetXML("入院患者护理评估单01.xml");
    }
}

eXistDB简单通讯07(HTTP_REST)

  • 保存文件
  • 取回文件
  • 查询

1、SaveFileHTTP.java

package com.neohope.existdb.test;

//apache的base64会多一个换行符
//import org.apache.ws.commons.util.Base64;
//import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import com.sun.xml.internal.messaging.saaj.util.Base64;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class SaveFileHTTP {
    public static void SaveXML(String inFileName, String fileId) throws IOException {
        URL url = new URL("http://localhost:8080/exist/rest/db/CDA/" + fileId);
        System.out.println("Save file to " + url.toString());

        HttpURLConnection connect = (HttpURLConnection) url.openConnection();
        connect.setRequestMethod("PUT");
        connect.setDoOutput(true);
        connect.setRequestProperty("Content-Type", "application/xml");
        String userCredentials = "neotest:neotest";
        String basicAuth = "Basic " + new String(new Base64().encode(userCredentials.getBytes()));
        System.out.println(basicAuth);
        connect.setRequestProperty ("Authorization", basicAuth);

        File file = new File(inFileName);
        InputStream is = new FileInputStream(file);
        OutputStream os = connect.getOutputStream();

        byte[] buf = new byte[1024];
        int c;
        while ((c = is.read(buf)) > -1) {
            os.write(buf, 0, c);
        }
        os.flush();
        os.close();
        System.out.println("Statuscode " + connect.getResponseCode()
                + " (" + connect.getResponseMessage() + ")");
    }

    public static void main(String[] args) throws IOException {
        SaveXML("D:\\MyProjects\\IDEA14\\TestExistDB\\XMLFiles\\医惠\\入院患者护理评估单01.xml", "入院患者护理评估单01.xml");
    }
}

eXistDB简单通讯06(RPC)

  • 保存文件
  • 取回文件

1、GetFileRPC.java

package com.neohope.existdb.test;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Vector;

public class GetFileRPC {
    public static void GetXML(String documentId, String user, String pwd) throws Exception {
        String uri = "http://localhost:8080/exist/xmlrpc";
        XmlRpcClient client = new XmlRpcClient();
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL(uri));
        config.setBasicUserName(user);
        config.setBasicPassword(pwd);
        client.setConfig(config);

        HashMap<String, String> options = new HashMap<String, String>();
        options.put("indent", "yes");
        options.put("encoding", "UTF-8");
        options.put("expand-xincludes", "yes");
        options.put("process-xsl-pi", "no");

        Vector<Object> params = new Vector<Object>();
        params.addElement(documentId);
        params.addElement(options);
        String xml = (String)
                client.execute("getDocumentAsString", params);
        System.out.println(xml);
    }

    public static void GetXMLChuncked(String documentId, String outPath, String user, String pwd) throws IOException, XmlRpcException {
        String url = "http://localhost:8080/exist/xmlrpc";

        XmlRpcClient client = new XmlRpcClient();
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL(url));
        config.setBasicUserName(user);
        config.setBasicPassword(pwd);
        client.setConfig(config);

        Hashtable<String, String> options = new Hashtable<String, String>();
        options.put("indent", "no");
        options.put("encoding", "UTF-8");

        Vector<Object> params = new Vector<Object>();
        params.addElement(documentId);
        params.addElement(options);

        FileOutputStream fos = new FileOutputStream(outPath);
        HashMap<?, ?> ht = (HashMap<?, ?>) client.execute("getDocumentData", params);
        int offset = ((Integer) ht.get("offset")).intValue();
        byte[] data = (byte[]) ht.get("data");
        String handle = (String) ht.get("handle");
        fos.write(data);

        while (offset != 0) {
            params.clear();
            params.addElement(handle);
            params.addElement(new Integer(offset));

            ht = (HashMap<?, ?>) client.execute("getNextChunk", params);
            data = (byte[]) ht.get("data");
            offset = ((Integer) ht.get("offset")).intValue();
            fos.write(data);
        }
        fos.close();
    }

    public static void main(String args[]) throws Exception {
        String user = "neotest";
        String pwd = "neotest";
        //GetXML("/db/CDA/入院患者护理评估单05.xml", user, pwd);
        GetXMLChuncked("/db/PNG/兔子.png","兔子1.png", user, pwd);
    }
}

eXistDB简单通讯05(RPC)

  • 保存文件
  • 取回文件

1、SaveFileRPC.java

package com.neohope.existdb.test;

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.net.URL;
import java.util.Vector;

public class SaveFileRPC {
    public static void SaveXML(String xmlFilePath, String user, String pw) throws Exception {
        String url = "http://localhost:8080/exist/xmlrpc";
        String path = "/db/CDA/入院患者护理评估单05.xml";

        XmlRpcClient client = new XmlRpcClient();
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL(url));
        config.setBasicUserName(user);
        config.setBasicPassword(pw);
        client.setConfig(config);

        BufferedReader f = new BufferedReader(new FileReader(xmlFilePath));
        String line;
        StringBuffer xml = new StringBuffer();
        while ((line = f.readLine()) != null)
            xml.append(line);
        f.close();

        Vector<Object> params = new Vector<Object>();
        params.addElement(xml.toString());
        params.addElement(path);
        params.addElement(new Integer(0));
        Boolean result = (Boolean) client.execute("parse", params);

        if (result.booleanValue())
            System.out.println("document stored.");
        else
            System.out.println("could not store document.");
    }

    public static void SaveXMLChuncked(String xmlFilePath, String user, String pwd) throws Exception {
        String url = "http://localhost:8080/exist/xmlrpc";
        String path = "/db/PNG/兔子.png";

        XmlRpcClient client = new XmlRpcClient();
        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
        config.setServerURL(new URL(url));
        config.setBasicUserName(user);
        config.setBasicPassword(pwd);
        client.setConfig(config);

        Vector<Object> params = new Vector<Object>();
        String handle = null;
        InputStream fis = new FileInputStream(xmlFilePath);
        byte[] buf = new byte[4096];
        int len;
        while ((len = fis.read(buf)) > 0) {
            params.clear();
            if (handle != null) {
                params.addElement(handle);
            }
            params.addElement(buf);
            params.addElement(new Integer(len));
            handle = (String) client.execute("upload", params);
        }
        fis.close();

        params.clear();
        params.addElement(handle);
        params.addElement(path);
        params.addElement(new Boolean(true));
        params.addElement("image/png");
        Boolean result = (Boolean) client.execute("parseLocal", params); // exceptions

        if (result.booleanValue())
            System.out.println("document stored.");
        else
            System.out.println("could not store document.");
    }

    public static void main(String args[]) throws Exception {
        String user = "neotest";
        String pwd = "neotest";
        SaveXML("PATH_TO_FILE\\入院患者护理评估单05.xml", user, pwd);
        //SaveXMLChuncked("D:\\MyProjects\\IDEA14\\TestExistDB\\XMLFiles\\兔子.png", user, pwd);
    }
}

eXistDB简单通讯04

  • 保存文件
  • 取回文件
  • 查询
  • 嵌套查询

1、Base.java

package com.neohope.existdb.test;

import org.exist.util.serializer.SAXSerializer;
import org.exist.util.serializer.SerializerPool;

import javax.xml.transform.OutputKeys;
import java.io.OutputStreamWriter;
import java.util.Properties;

public class Base {
    protected final static String URI = "xmldb:exist://localhost:8080/exist/xmlrpc";
    protected final static String driver = "org.exist.xmldb.DatabaseImpl";
    protected static  Class<?> cl = null;

    static{
        try {
            cl = Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    protected static SAXSerializer getSAXSerializer()
    {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(OutputKeys.INDENT, "yes");
        SAXSerializer serializer = (SAXSerializer) SerializerPool.getInstance().borrowObject(SAXSerializer.class);
        serializer.setOutput(new OutputStreamWriter(System.out), outputProperties);
        return serializer;
    }

    protected static void releaseSAXSerializer(SAXSerializer serializer) {
        SerializerPool.getInstance().returnObject(serializer);
    }
}

Continue reading eXistDB简单通讯04

eXistDB简单通讯03

  • 保存文件
  • 取回文件
  • 查询
  • 嵌套查询

1、Base.java

package com.neohope.existdb.test;

import org.exist.util.serializer.SAXSerializer;
import org.exist.util.serializer.SerializerPool;

import javax.xml.transform.OutputKeys;
import java.io.OutputStreamWriter;
import java.util.Properties;

public class Base {
    protected final static String URI = "xmldb:exist://localhost:8080/exist/xmlrpc";
    protected final static String driver = "org.exist.xmldb.DatabaseImpl";
    protected static  Class<?> cl = null;

    static{
        try {
            cl = Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    protected static SAXSerializer getSAXSerializer()
    {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(OutputKeys.INDENT, "yes");
        SAXSerializer serializer = (SAXSerializer) SerializerPool.getInstance().borrowObject(SAXSerializer.class);
        serializer.setOutput(new OutputStreamWriter(System.out), outputProperties);
        return serializer;
    }

    protected static void releaseSAXSerializer(SAXSerializer serializer) {
        SerializerPool.getInstance().returnObject(serializer);
    }
}

Continue reading eXistDB简单通讯03

eXistDB简单通讯02

  • 保存文件
  • 取回文件
  • 查询
  • 嵌套查询

1、Base.java

package com.neohope.existdb.test;

import org.exist.util.serializer.SAXSerializer;
import org.exist.util.serializer.SerializerPool;

import javax.xml.transform.OutputKeys;
import java.io.OutputStreamWriter;
import java.util.Properties;

public class Base {
    protected final static String URI = "xmldb:exist://localhost:8080/exist/xmlrpc";
    protected final static String driver = "org.exist.xmldb.DatabaseImpl";
    protected static  Class<?> cl = null;

    static{
        try {
            cl = Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    protected static SAXSerializer getSAXSerializer()
    {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(OutputKeys.INDENT, "yes");
        SAXSerializer serializer = (SAXSerializer) SerializerPool.getInstance().borrowObject(SAXSerializer.class);
        serializer.setOutput(new OutputStreamWriter(System.out), outputProperties);
        return serializer;
    }

    protected static void releaseSAXSerializer(SAXSerializer serializer) {
        SerializerPool.getInstance().returnObject(serializer);
    }
}

Continue reading eXistDB简单通讯02

eXistDB简单通讯01

  • 保存文件
  • 取回文件
  • 查询
  • 嵌套查询

1、Base.java

package com.neohope.existdb.test;

import org.exist.util.serializer.SAXSerializer;
import org.exist.util.serializer.SerializerPool;

import javax.xml.transform.OutputKeys;
import java.io.OutputStreamWriter;
import java.util.Properties;

public class Base {
    protected final static String URI = "xmldb:exist://localhost:8080/exist/xmlrpc";
    protected final static String driver = "org.exist.xmldb.DatabaseImpl";
    protected static  Class<?> cl = null;

    static{
        try {
            cl = Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    protected static SAXSerializer getSAXSerializer()
    {
        Properties outputProperties = new Properties();
        outputProperties.setProperty(OutputKeys.INDENT, "yes");
        SAXSerializer serializer = (SAXSerializer) SerializerPool.getInstance().borrowObject(SAXSerializer.class);
        serializer.setOutput(new OutputStreamWriter(System.out), outputProperties);
        return serializer;
    }

    protected static void releaseSAXSerializer(SAXSerializer serializer) {
        SerializerPool.getInstance().returnObject(serializer);
    }
}

Continue reading eXistDB简单通讯01

CPP实现CORBA静态绑定(八)

  • CORBA基本架构
  • IDL文件编写
  • CPP示例实现(上)
  • CPP示例实现(下)
  • C示例实现(IOR+NS上)
  • C示例实现(IOR+NS下)
  • C示例实现(IOR上)
  • C示例实现(IOR下)

然后完成客户端部分:
Hi-client-ior.c

#include <assert.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <orbit/orbit.h>

#include "Hi.h"

/*
Usage: ./hi-client_ns
*/

/**
 * test for exception
 */
static
gboolean
raised_exception(CORBA_Environment *ev)
{
	return ((ev)->_major != CORBA_NO_EXCEPTION);
}

/**
 * in case of any exception this macro will abort the process
 */
static
void
abort_if_exception(CORBA_Environment *ev, const char* mesg)
{
	if (raised_exception (ev)) {
		g_error ("%s %s", mesg, CORBA_exception_id (ev));
		CORBA_exception_free (ev);
		abort();
	}
}


/*
 * main
 */
int main(int argc, char* argv[])
{
	CORBA_ORB orb=CORBA_OBJECT_NIL;
	CORBA_Environment ev;
	HiCorba_Hi service = CORBA_OBJECT_NIL;

	//init orb
	g_print("\nClient>starting client...");
	g_print("\nClient>creating and initializing the ORB");
	CORBA_exception_init(&ev);
	abort_if_exception(&ev, "CORBA_exception_init failed");
	orb=CORBA_ORB_init(&argc,argv,"orbit-local-orb",&ev);
	abort_if_exception(&ev, "CORBA_ORB_init failed");

	// read name_service ior from ns.ior 
	CORBA_char  filename[] = "service.ior";
 	FILE *file   = NULL;
	g_print("\nClient>reading the file '%s'",filename);
	if ((file=fopen(filename, "r"))==NULL)
                g_error ("could not open '%s'", filename);
	gchar objref[1024];
	fscanf (file, "%s", &objref);
	g_print("\nClient>getting the 'IOR' - from the file '%s'",filename);
	g_print("\nClient>the IOR is '%s'",objref);
        service = (HiCorba_Hi)CORBA_ORB_string_to_object(orb,objref,&ev);
	abort_if_exception(&ev, "CORBA_ORB_string_to_object 'NameService IOR' failed");

	// invoke service
	g_print("\nClient>calling the Hi service...");
	CORBA_char *msg=HiCorba_Hi_sayHiTo(service, "neohope", &ev);
	abort_if_exception(&ev, "HiCorba_Hi_sayHiTo failed");
        g_print("\nClient>server returned the following message: %s\n", msg);

	CORBA_Object_release(service, &ev);
	abort_if_exception(&ev, "release failed");

        if (orb != CORBA_OBJECT_NIL)
        {
           /* going to destroy orb.. */
           CORBA_ORB_destroy(orb, &ev);
	   abort_if_exception(&ev, "destroy failed");
	}

}

MakeClient

CC       = gcc
CFLAGS   = -c -g -pthread -D_REENTRANT -DORBIT2=1 \
           -I/usr/include/orbit-2.0 \
           -I/usr/include/glib-2.0 \
           -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
LDFLAGS  = -Wl,--export-dynamic -lORBit-2 -lORBitCosNaming-2 -lgmodule-2.0 \
           -ldl -lgobject-2.0 -lgthread-2.0 -lpthread -lglib-2.0 -lm \
           -L/usr/lib
ORBIT_IDL= /usr/bin/orbit-idl-2

all : Hi-client-ior.bin

Hi-client-ior.bin : Hi-common.o Hi-stubs.o Hi-client-ior.o
	$(CC) $(LDFLAGS) Hi-common.o Hi-stubs.o Hi-client-ior.o -o Hi-client-ior.bin

%.o : %.c 
	$(CC) $(CFLAGS) $< -o $@ 

nidl : Hi.idl
	$(ORBIT_IDL) Hi.idl
	$(ORBIT_IDL) --skeleton-impl Hi.idl

clean:
	rm -rf *.bin
	rm -rf *.o

编译

Make -f MakeClient

运行

#首先运行orbd
orbd -ORBInitialPort 1900
 
#然后运行server
./Hi-server-ior.bin
Server>starting server...
Server>creating and initializing the ORB
Server>getting reference to RootPOA
Server>activating the POA Manager
Server>creating the servant
Server>writing the file 'service.ior'
Server>writing the IOR to file 'service.ior'
Server>running the orb...
Server>server is returning: Hi, neohope !
 
#然后运行client
./Hi-client-ior.bin
Client>starting client...
Client>creating and initializing the ORB
Client>reading the file 'service.ior'
Client>getting the 'IOR' - from the file 'service.ior'
Client>the IOR is 'IOR:010000001300000049444c3a4869436f7262612f48693a312e300000030000000054424f580000000101020005000000554e4958000000000a0000006c6f63616c686f73740000002d0000002f746d702f6f726269742d6e656f686f70652f6c696e632d316235362d302d376663653334336261303164360000000000000000caaedfba58000000010102002d0000002f746d702f6f726269742d6e656f686f70652f6c696e632d316235362d302d37666365333433626130316436000000001c00000000000000dbcce0b85e73a828c02b2828282828280100000060aa3a1a01000000480000000100000002000000050000001c00000000000000dbcce0b85e73a828c02b2828282828280100000060aa3a1a01000000140000000100000001000105000000000901010000000000'
Client>calling the Hi service...
Client>server returned the following message: Hi, neohope !