随笔 - 175  文章 - 202  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜


xsl 里增加

   function valueOf(context, elem) {
    return tools.valueOf(context, elem);
   }
代码里增加


 public String valueOf(XSLProcessorContext context, ElemExtensionCall elem) {
  String value = elem.getAttribute("select");
  String maxStr = elem.getAttribute("max");
  try {
   value = executeExpression(context, elem, value);
  } catch (TransformerException e) {
  }
  if (isNotBlank(maxStr)) {
   try {
    int max = Integer.parseInt(maxStr);
    value = shortStr(value, max);
   } finally {
   }
  }
  return value;
 }

 private String executeExpression(XSLProcessorContext context, ElemExtensionCall elem, String value)
   throws TransformerException {
  XPathContext xctxt = context.getTransformer().getXPathContext();
  XPath path = new XPath(value, elem, xctxt.getNamespaceContext(), XPath.SELECT);
  XObject data = path.execute(xctxt, context.getContextNode(), elem);
  if (data != null)
   value = data.xstr().toString();
  return value == null ? "" : value;
 }











参考了下面的文档






[prev in list] [next in list] [prev in thread] [next in thread]
List: xalan-j-users Subject: Re: Extension element with subelements From: John Gentilin <gentijo () eyecatching ! com> Date: 2007-09-07 21:48:37 Message-ID: 46E1C735.2080504 () eyecatching ! com [Download message RAW] Oops... this might be what you are after instead... executeChildTemplatesToXML or ToString or ToXMLString may be what you are after.. /** * A repository for common functions that can be used but the extension * functions and extension elements. * * * Title: Base Functions * Copyright: Copyright (c) 2005 * Company: Eye Catching Solutions Inc. * @version 1.0 * @author John Gentilin */ public class BaseFunctions { private static Category m_Log = Category.getInstance("RapidXSL.Interface"); private static DocumentBuilderFactory m_dfactory = null; private static DocumentBuilder m_docBuilder = null; /** * @param context * @param elem * @throws TransformerException */ protected void executeChildTemplates( XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException { TransformerImpl transf = context.getTransformer(); transf.executeChildTemplates(elem, context.getContextNode(), context.getMode(), transf.getResultTreeHandler()); } /** * @param context * @param elem * @throws TransformerException */ protected Document executeChildTemplatesToXML(Document doc, XSLProcessorContext context, ElemExtensionCall elem ) throws XMLServerException { DOMBuilder builder = null; TransformerImpl transformer = context.getTransformer(); try { builder = new DOMBuilder(doc); transformer.executeChildTemplates(elem, context.getContextNode(), context.getMode(), builder); } catch (Exception e) { throw new XMLServerException("RXSL_IFACE", "XSL Interface Error - " + e.getLocalizedMessage()); } return doc; } /** * @param context * @param elem * @throws TransformerException */ protected String executeChildTemplatesToString(XSLProcessorContext context, ElemExtensionCall elem ) throws XMLServerException { TransformerImpl transformer = context.getTransformer(); try { TextSerializationHandler handler = new TextSerializationHandler(); transformer.executeChildTemplates(elem, context.getContextNode(), context.getMode(), handler); return handler.toString(); } catch (Exception e) { throw new XMLServerException("RXSL_IFACE", "XSL Interface Error - " + e.getLocalizedMessage()); } } protected String executeChildTemplatestoXMLString(XSLProcessorContext context, ElemExtensionCall elem) throws TransformerException, SAXException { try { TransformerImpl transformer = context.getTransformer(); // This should be worked on so that the output format can be // defined by a first child of the redirect element. OutputProperties format = transformer.getOutputFormat(); Properties prop = format.getProperties(); format.setProperty("indent","no"); format.setProperty("{http://xml.apache.org/xalan}indent-amount","0"); ByteArrayOutputStream ostream = new ByteArrayOutputStream(); SerializationHandler serializer = transformer.createSerializationHandler( new StreamResult(ostream), format); serializer.startDocument(); transformer.executeChildTemplates(elem, context.getContextNode(), context.getMode(), serializer); serializer.flushPending(); serializer.endDocument(); return ostream.toString("ISO-8859-1"); } catch (UnsupportedEncodingException e) { m_Log.fatal("Error Encoding Bytes from XML - " + e.getLocalizedMessage()); return new String(); } } /** * Get the Node Value of a Stylesheet Element. This will be used to collect * the data value when populating a Control..... * * @return */ protected String getNodeValue( ElemExtensionCall elem ) { Node child = elem.getFirstChild(); if (child != null) { return child.getNodeValue(); } return null; } /** * Resolve the Attribute Selection for the fixed attribute "select" * * @return * @throws TransformerException */ protected String getStringValueFromSelectExpr(XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException { return getStringValueFromAttribute("select", context, elem); } /** * Find the Attribute named "attrib" and convert that to an XPath statement * that can be executed. * * Return null if the Attribute did not exist. * * @param attrib * @return * @throws TransformerException */ protected static XPath getAttributeExpr( String attrib, XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException { String expr = elem.getAttribute (attrib, context.getContextNode(), context.getTransformer()); if(null != expr) { org.apache.xpath.XPathContext xctxt = context.getTransformer().getXPathContext(); return new XPath( expr, elem, xctxt.getNamespaceContext(), XPath.SELECT); } return null; } /** * * Get the value of an Attribute. It will first try to treat the attribute as an XPath * if that fails then just return the attribute value itself. * * @param attrName * @param context * @param elem * @return */ protected String getStringValueFromAttribute( String attrName, XSLProcessorContext context, ElemExtensionCall elem ) { XPath path; String value = null; try { path = getAttributeExpr(attrName, context, elem); if (path != null) { XObject data = executeXPath(path, context, elem); if (data != null) value = data.xstr().toString(); } } catch (TransformerException e) { value = elem.getAttribute(attrName); } if (value == null) value = ""; return value; } /** * A helper function to execute an XPath Object. * * @param path * @return * @throws TransformerException */ protected static XObject executeXPath( XPath path, XSLProcessorContext context, ElemExtensionCall elem ) throws TransformerException { org.apache.xpath.XPathContext xctxt = context.getTransformer().getXPathContext(); return path.execute(xctxt, context.getContextNode(), elem); } protected Document getEmptyDocument() { initDocFactory(); return m_docBuilder.newDocument(); } protected static void initDocFactory() { if (m_dfactory != null) return; try { m_dfactory = DocumentBuilderFactory.newInstance(); m_docBuilder = m_dfactory.newDocumentBuilder(); } catch (Exception e) { m_Log.fatal("RapidXSL Interface, failure to init XML Subsystem - " + e.getLocalizedMessage()); } } } Cynepnaxa wrote: > Hi, everybody! > I start to write simple extension element, but a problem occurs. I want to > access extension element's subelements in java+xalan. My xsl contains > following block of code: > <my-ext:request> > <body><xsl:value-of select="$body"/></body> > <contentType>text/html</contentType> > <metaData><![CDATA[<?xml version="1.0" encoding="utf-8"?>]]><metaData> > <xsl:value-of select="$metaData"/> > </metaData> > </metaData> > </my-ext:request> > In extension element Java-method i have "XSLProcessorContext context" and > "ElemExtensionCall elem". I can get contentType by calling for example > "elem.getFirstChild().getNextSibling().getFirstChild().getTextContent()", > but i want to access subelements by tag name(for example, by > elem.getElementsByTagName("metadata"), or XPath). I have no idea how to > access in java content of $body variable and xml - encapsulated $metaData. > All google - examples shining no light. Is simple xslt - subelements access > method exist? Big thanx for help. > P.S. Sorry for my English. I hope you understand me. > > [prev in list] [next in list] [prev in thread] [next in thread]


Configure | About | News | Donate | Add a list | Sponsors: 10EastKoreLogicTerra-InternationalChakpak.com
posted @ 2009-10-21 17:19 哈哈的日子 阅读(353) | 评论 (0)编辑 收藏

 要过生日了,看看老婆的准备。


早饭:
长寿面+荷包蛋 用小青菜做汤
 
 
 
 
 
中饭:
菜:
1可乐鸡
2鱼
3锅包肉
4黄瓜炒肉
5皮蛋
6花生
 
汤:蛋花汤
 
水果:榴莲 哈密瓜
 
饮料:可乐 啤酒
 
主食:饺子
 
主要地:生日蛋糕


重要的是生日礼物:
                苹果笔记本电脑还有一个蓝牙的无线苹果鼠标,无比的喜欢!!!
posted @ 2009-09-14 21:17 哈哈的日子 阅读(423) | 评论 (3)编辑 收藏
1. 先到 google code 上下载了 api 的 lib,当然是 java client,还有好多,比如 .net , php 什么的,没看。
2. 去看 google data api 的 getting start,但是,那个 ant 命令执行完,会出一些 captcha 的错误,没细看,估计是需要验证码了,api 没跟上。
3. 直接到 calendar 里面,把 CalendarFeedDemo执行了一下,注意,需要输入用户名和密码,用户名是 aaa@gmail.com 这样的,但发现这个不是我要的,我要的只是增加个 event 而已。
4. 执行 EventFeedDemo,jump这个才是我要的,简化了一下,只要能增加一个定时的 event,并有提醒,就够了。

代码在下面,连包名都没改:
 1 
 2 package sample.calendar;
 3 
 4 import java.io.IOException;
 5 import java.net.URL;
 6 import java.util.Calendar;
 7 import java.util.GregorianCalendar;
 8 import java.util.TimeZone;
 9 
10 import com.google.gdata.client.calendar.CalendarService;
11 import com.google.gdata.data.DateTime;
12 import com.google.gdata.data.PlainTextConstruct;
13 import com.google.gdata.data.calendar.CalendarEventEntry;
14 import com.google.gdata.data.extensions.Reminder;
15 import com.google.gdata.data.extensions.When;
16 import com.google.gdata.data.extensions.Reminder.Method;
17 import com.google.gdata.util.ServiceException;
18 
19 public class HahaCalendar {
20     private static URL eventFeedUrl;
21     private static final String METAFEED_URL_BASE = "http://www.google.com/calendar/feeds/";
22     private static final String EVENT_FEED_URL_SUFFIX = "/private/full";
23 
24     public static void main(String[] args) throws ServiceException, IOException {
25         String username = "username@gmail.com";
26         eventFeedUrl = new URL(METAFEED_URL_BASE + username + EVENT_FEED_URL_SUFFIX);
27         CalendarService myService = new CalendarService("haha calendar");
28         myService.setUserCredentials(username, "password");
29         CalendarEventEntry singleEvent = createSingleEvent(myService, "每天背单词""单词1,单词2");
30         System.out.println("Successfully created event " + singleEvent.getTitle().getPlainText());
31     }
32 
33     private static CalendarEventEntry createSingleEvent(CalendarService service, String eventTitle, String eventContent)
34             throws ServiceException, IOException {
35         CalendarEventEntry entry = new CalendarEventEntry();
36         entry.setTitle(new PlainTextConstruct(eventTitle));
37         entry.setContent(new PlainTextConstruct(eventContent));
38         Calendar calendar = new GregorianCalendar();
39         calendar.add(Calendar.MINUTE, 10);
40         DateTime startTime = new DateTime(calendar.getTime(), TimeZone.getDefault());
41         calendar.add(Calendar.MINUTE, 60);
42         DateTime endTime = new DateTime(calendar.getTime(), TimeZone.getDefault());
43         When eventTimes = new When();
44         eventTimes.setStartTime(startTime);
45         eventTimes.setEndTime(endTime);
46         entry.addTime(eventTimes);
47         addReminder(entry);
48         return service.insert(eventFeedUrl, entry);
49     }
50 
51     private static void addReminder(CalendarEventEntry myEntry) {
52         Reminder reminder = new Reminder();
53         reminder.setMinutes(5);
54         reminder.setMethod(Method.SMS);
55         myEntry.getReminder().add(reminder);
56     }
57 }
58 

想用的注意,把上面的用户名和密码改成自己的。


posted @ 2009-07-19 13:04 哈哈的日子 阅读(2291) | 评论 (4)编辑 收藏
1. 先到 oracle 网站上下载了 oracle 11g for linux 的 zip 包,并解压
2. 在用户下执行 ./runInstaller -jreLoc /usr/lib/jvm/java-6-sun/jre/(我指定了使用我安装的jdk,否则会中文乱码)
待续……
3. 一路下一步就可以了,但其中有一些依赖的东西需要先安装好,有
  a) libaio1
  b) rpm
  c) ksh
4. 要把一些命令 link 到 /usr/bin 目录下,其中 有
  a) awk -> /etc/alternatives/awk
  b) ksh -> /etc/alternatives/usr.bin.ksh
5. 还要把一个必须的目录建出来,就是 /opt,其实这个目录有可能已经存在了的。
6. 然后就一切 ok 了,但要启动 oracle 还需要增加一些环境变量,我一般就把这些放在 .bashrc 里了。
  a) export ORACLE_HOME=/home/haha/app/haha/product/11.1.0/db_1
  b) export ORACLE_SID=haha
  c) export NLS_LANG=american_america.utf8(这个是为了显示中文内容的时候不会乱码)
  d) export PATH=$PATH:/home/haha/app/haha/product/11.1.0/db_1/bin(这个就是为了方便,不设也行)
7. 测试安装是否成功,可以从下面的几个方面看
  a) 访问 https://domain:1158/em,看看能登录不。
  b) netstat -anop | grep 1521,看看 listener 启动没有


下次再启动 oracle 需要使用下面的命令
  a) 启动数据库实例: sqlplus "/as sysdba",然后 startup
  b) 启动 listener:lsnrctl start
  c) 启动 em:emctl start dbconsole(可选)


linux oracle 客户端可以使用 sql developer,在 oracle 网站上就能下载,其实这是无奈之举,毕竟 plsqldev 无法在 linux 下使用。

posted @ 2009-07-12 18:23 哈哈的日子 阅读(3309) | 评论 (5)编辑 收藏
找到一篇非常不错的文章,晚上回来操作一下。
http://zeroliu.blogdriver.com/zeroliu/1208212.html

应用场景:
玩个游戏文字mud,客户端使用mushclient,支持使用 lua 脚本来写 robot,以便自动练功。
但由于多个 id 之间 share 数据比较困难,导致地图数据在每个 id 都要加载一次,数量大了之后,内存用很多,而且还会出现莫明其妙的内存泄漏问题。所以想改用 java 实现(因为我不会用 c 实现)

最终选择了使用 lua 调用 c,然后调用 java
posted @ 2008-10-19 09:49 哈哈的日子 阅读(217) | 评论 (0)编辑 收藏
安装了cdt 5.0,以前可以build的project死都不能build。
错误是
**** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\Test.o ..\src\Test.cpp
Internal Builder: Cannot run program "g++": ϵͳÕҲ»µ½ָ¶¨µ
Build error occurred, build is stopped
Time consumed: 0  ms. 


把 MinGW 的运行目录加到classpath里,把mingw32-make.exe复制一个,改名为make.exe。
在命令行下,一切都没有问题,就是在 eclipse里面不能用,郁闷了几天了。

google 了一下,参考了
http://www.eclipseworld.org/bbs/read-cec-tid-18540-page-e.html
这个帖子中参考了
http://74.53.91.20/bbs/read-cec-tid-17557-fpage-2.html

最终的方法是将
org.eclipse.cdt.core.win32_5.0.0.200809120802.jar
解压成目录org.eclipse.cdt.core.win32_5.0.0.200809120802,注意把原来的jar删除。

要人命了,这也能行,不看 code 估计这辈子都解决不了这个问题了。
posted @ 2008-10-18 20:36 哈哈的日子 阅读(1727) | 评论 (4)编辑 收藏
今天安装了 svn 服务端。
为什么写呢?因为和以前安装的不一样。
有什么不一样呢?
1、方便了很多
2、安装了 viewvc

为什么要安装 viewvc,而不是fisheye呢?
不是因为viewvc比fisheye好,就是因为刚才的第一点,方便。

以前安装 svn 都是直接下载一个 svn windows 版的压缩包,解压,bin目录加到path里,使用 sc 命令用 svnserve 建个服务,启动,完成。
其实这个步骤还是很简单的,就是在使用 sc 建 service 的时候,命令行有些复杂而已。
但这样只能使用 svn://xxx/xxx 来使用,而且不能在 web 上看到版本库,那么,就想了点儿办法,安装一个 apache 吧,然后根据文档,一顿猛配,相当的麻烦。好处就是,可以使用 http://xxx/xxx 来使用,而且可以在 web 上浏览到最新的版本内容,虽然 web 功能土了点儿,但至少可以使用了。有的时候,深得这样不爽,就再加个 fisheye,我个人相当喜欢 fisheye 这个软件,以至于花了点儿时间破解了一下,需要的可以在 blog 上找一下,不是暴力的那种,是半注册的,可以跟着升级的那种。

但是,唯一,也是最大的问题,就是麻烦,安装这一套东西,那是相当的麻烦啊。

今天发现了一个方便的办法。

下载三个东西:
1、CollabNet Subversion Server
2、python
3、python win32api

安装过程和下载不太一样。
1、python
2、CollabNet Subversion Server
3、python win32api

2、3顺序无所谓的。

然后,就拥有了一个 svn + apache + viewvc 的环境了,相当的方便。
我喜欢。

呵呵…… ^_^
posted @ 2008-08-05 21:28 哈哈的日子 阅读(590) | 评论 (0)编辑 收藏
1、我想做什么
2、我该做什么
3、我要做多久
posted @ 2008-06-12 22:31 哈哈的日子 阅读(235) | 评论 (0)编辑 收藏
可以直接将 plugin 放到 dropins 目录下,即可自动完成安装。

dropins 目录支持下列形式的结构。

1、
 eclipse/
dropins/
org.eclipse.core.tools_1.4.0.200710121455.jar
org.eclipse.releng.tools_3.3.0.v20070412/
plugin.xml
tools.jar
... etc ...
...


2、

 eclipse/
dropins/
eclipse/
features/
plugins/


3、

 eclipse/
dropins/
emf/
eclipse/
features/
plugins/
gef/
eclipse/
features/
plugins/
... etc ...

4、 

 eclipse/
dropins/
emf.link

最后一种就相当原来的 links 目录,只要写
path = ...
就可以了。
posted @ 2008-04-13 13:02 哈哈的日子 阅读(4792) | 评论 (0)编辑 收藏
batch_size 即同时提交数据的数量,原本与事务并没有什么关系,但如果涉及到同一张表数据的同一种操作,可能就会发生微妙的关系了。

场景如下:
场景一:使用 spring 控制事务,将方法事务配置为 not_supported,向同一张表中插入两条数据,保证第一条数据正常插入,而第二条数据受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:两条数据均失败。
原因:hibernate 将两条插入放到了同一个 batch 中,提交同时失败了。

场景二:同样使用 spring 控制事务,将方法事务配置为 not_supported,向第一张表中插入一条合法数据,成功,向第二张表插入数据,受约束(如唯一约束)插入失败。

预测结果:第一条数据成功,第二条失败。
实际结果:第一条数据成功,第二条失败。
原因:hibernate 分别插入数据并提交,在无事务的情况下,第一条成功,第二条失败。

那么如何让场景一得到预测结果呢,一个简单的解决方法,将 hibernate.jdbc.batch_size 设置为 1,即可。

所以,即使控制了事务,也未必能够得到期望的结果,还需要考虑某些特殊的场景带来的影响。
posted @ 2008-03-06 14:18 哈哈的日子 阅读(1822) | 评论 (2)编辑 收藏
仅列出标题
共17页: First 上一页 7 8 9 10 11 12 13 14 15 下一页 Last