`

Chapter 2 - Jetty读取配置文件和Loader (2)

阅读更多
1. XmlConfiguration的value方法

读取某个节点的值,并进行相应处理:修剪空字符串,解析并拼接结果

private Object value(Object obj, XmlParser.Node node) throws Exception
    {
        Object value = null;

        // Get the type
        String type = node.getAttribute("type");

        // Try a ref lookup
        String ref = node.getAttribute("ref");
        if (ref != null)
        {
            value = _idMap.get(ref);
        }
        else
        {
            // handle trivial case
            if (node.size() == 0)
            {
                if ("String".equals(type)) return "";
                return null;
            }

            // Trim values
            int first = 0;
            int last = node.size() - 1;

            // Handle default trim type
            if (type == null || !"String".equals(type))
            {
                // Skip leading white
                Object item = null;
                while (first <= last)
                {
                    item = node.get(first);
                    if (!(item instanceof String)) break;
                    item = ((String) item).trim();
                    if (((String) item).length() > 0) break;
                    first++;
                }

                // Skip trailing white
                while (first < last)
                {
                    item = node.get(last);
                    if (!(item instanceof String)) break;
                    item = ((String) item).trim();
                    if (((String) item).length() > 0) break;
                    last--;
                }

                // All white, so return null
                if (first > last) return null;
            }

            if (first == last)
                //  Single Item value
                value = itemValue(obj, node.get(first));
            else
            {
                // Get the multiple items as a single string
                StringBuffer buf = new StringBuffer();
                synchronized (buf)
                {
                    for (int i = first; i <= last; i++)
                    {
                        Object item = node.get(i);
                        buf.append(itemValue(obj, item));
                    }
                    value = buf.toString();
                }
            }
        }

        // Untyped or unknown
        if (value == null)
        {
            if ("String".equals(type)) return "";
            return null;
        }

        // Try to type the object
        if (type == null)
        {
            if (value != null && value instanceof String) return ((String) value).trim();
            return value;
        }

        if ("String".equals(type) || "java.lang.String".equals(type)) return value.toString();

        Class pClass = TypeUtil.fromName(type);
        if (pClass != null) return TypeUtil.valueOf(pClass, value.toString());

        if ("URL".equals(type) || "java.net.URL".equals(type))
        {
            if (value instanceof URL) return value;
            try
            {
                return new URL(value.toString());
            }
            catch (MalformedURLException e)
            {
                throw new InvocationTargetException(e);
            }
        }

        if ("InetAddress".equals(type) || "java.net.InetAddress".equals(type))
        {
            if (value instanceof InetAddress) return value;
            try
            {
                return InetAddress.getByName(value.toString());
            }
            catch (UnknownHostException e)
            {
                throw new InvocationTargetException(e);
            }
        }

        throw new IllegalStateException("Unknown type " + type);
    }


2. XmlConfiguration的itemValue方法

读取单个节点的值,如果item是String类型,直接返回
如果是其它的tag,还需要调用对应的处理方法

private Object itemValue(Object obj, Object item) throws Exception
    {
        // String value
        if (item instanceof String) return item;

        XmlParser.Node node = (XmlParser.Node) item;
        String tag = node.getTag();
        if ("Call".equals(tag)) return call(obj, node);
        if ("Get".equals(tag)) return get(obj, node);
        if ("New".equals(tag)) return newObj(obj, node);
        if ("Ref".equals(tag)) return refObj(obj, node);
        if ("Array".equals(tag)) return newArray(obj, node);
        if ("Map".equals(tag)) return newMap(obj, node);
        if ("Property".equals(tag)) return propertyObj(obj,node);

        if ("SystemProperty".equals(tag))
        {
            String name = node.getAttribute("name");
            String defaultValue = node.getAttribute("default");
            return System.getProperty(name, defaultValue);
        }
        
        Log.warn("Unknown value tag: " + node, new Throwable());
        return null;
    }
分享到:
评论

相关推荐

    eclipse jetty插件run-jetty-run-1.3.3

    eclipse jetty插件,从...下载run-jetty-run.zip文件,解压后再编写个links文件丢到eclipse的dropins目录下即可,省去了使用eclipse update方式安装的麻烦。 link文件样例如: path=d:\\eclipse_plugins\\run-jetty-run

    run-jetty-run 1.3.5eclipse插件包

    安装方法为新加一个run-jetty-run.link文件,文件内容为 path=G:\\eclipse_plugins\\run-jetty-run 执行解压后的路径文件夹即可。 在线安装地址为: http://xzer.github.io/run-jetty-run-updatesite/nightly/ 支持...

    maven集成jetty所需jar包maven-jetty-plugin,多版本

    要在Maven项目中使用`maven-jetty-plugin`,首先需要在项目的`pom.xml`文件中添加插件的配置。例如: ```xml ... &lt;groupId&gt;org.mortbay.jetty &lt;artifactId&gt;maven-jetty-plugin &lt;version&gt;6.1.x...

    i-jetty源码

    3. **运行i-jetty**:编译完成后,你可以通过Java的`java -jar`命令运行生成的JAR文件,例如:`java -jar target/i-jetty-3.1.jar`。根据项目的具体配置,可能需要提供额外的启动参数。 四、源码学习 深入学习i-...

    maven-jetty-plugin

    &lt;artifactId&gt;maven-jetty-plugin 版本号 &lt;!-- 配置项 --&gt; ... ``` 总的来说,Maven Jetty Plugin是Java Web开发者的重要工具,它简化了开发流程,提高了效率,同时也为持续集成和持续部署提供了便利...

    cxf-rt-transports-http-jetty-3.0.2.zip

    综上所述,"cxf-rt-transports-http-jetty-3.0.2.zip"和"jcabi-aspects.zip"分别是Apache CXF框架的一个组件和一个Java注解库,它们都为Java开发者提供了强大的工具,以更高效和灵活的方式构建和管理Web服务及应用...

    i-jetty libs包

    android i-jetty servlet-api-2.5.jar jetty-servlet-7.6.0.RC4.jar jetty-server-7.6.0.RC4.jar jetty-http-7.6.0.RC4.jar

    Android-I-Jetty服务器

    **Android-I-Jetty服务器详解** ...总之,Android-I-Jetty服务器为开发者提供了一种在Android设备上运行自定义Web服务的便捷方式,结合`i-jetty-ui`,可以更好地管理和监控服务器状态,提高开发效率。

    Android源码——i-jetty开源项目.zip

    2. **Jetty基础** Jetty是一款流行的、高性能的Java HTTP服务器和Servlet容器。它以其轻量级、快速和稳定而受到青睐。在Android平台上,由于资源限制,i-jetty项目对Jetty进行了优化,使其更适合在移动设备上运行。...

    i-jetty-lib

    【标题】"i-jetty-lib" 是一个针对Android平台的Jetty服务器库的集成与编译项目,旨在为Android开发者提供轻量级、高效的HTTP服务器解决方案。Jetty是一款开源的Java Web服务器和Servlet容器,它支持多种Web协议,如...

    run-jetty-run

    此外,run-jetty-run还支持多项目配置,这意味着你可以同时管理多个Jetty服务器实例,每个实例对应不同的项目,这对于同时处理多个Web应用的开发任务非常有帮助。通过插件的设置界面,开发者可以配置Jetty的端口号、...

    i-jetty 项目lib和apk源码

    这个项目包含两大部分:`i-jetty_lib`和`i-jetty-master`。 `i-jetty_lib`文件夹可能包含了i-jetty的核心库文件,这是一个预编译的Java类库(jar包),开发者可以将它集成到他们的Android应用中。这个库文件通常...

    run-jetty-run eclipse 离线安装包

    总的来说,Run-Jetty-Run插件是Eclipse开发环境与Jetty服务器之间的一座桥梁,它极大地简化了Jetty的使用流程,让开发者可以更加专注于应用的开发和调试,而无需关心底层服务器的配置和管理。通过离线安装包的方式,...

    I-Jetty相关jar包

    2. **Jetty Server**: 这是I-Jetty自身的核心组件,可能包含多个版本的jar包,如`jetty-server.jar`、`jetty-http.jar`、`jetty-io.jar`等,用于构建和管理Web服务器。 3. **Jetty Servlet Handler**: 用来处理...

    Run-Jetty 插件 离线安装

    它可以自动配置项目到Jetty服务器,使得在开发过程中能够快速地进行测试和调试,提高开发效率。 2. **离线安装步骤** - **下载插件**:首先,你需要从可靠的资源网站或者官方渠道下载Run-Jetty插件的压缩包文件。...

    maven-jetty-plugin-6.1.3.jar

    maven-jetty-plugin-6.1.3.jar

    maven-jetty-plugin-6.1.26-sources.jar

    maven-jetty-plugin-6.1.26-sources.jar

    maven-jetty-jspc-plugin-6.1.9.jar

    maven-jetty-jspc-plugin-6.1.9.jar

    maven-jetty-jspc-plugin-6.1.25-sources.jar

    maven-jetty-jspc-plugin-6.1.25-sources.jar

    i-jetty libs

    对于任何使用i-jetty的人来说,理解并正确配置这些库文件至关重要,因为它们将直接影响到i-jetty的功能和性能。 在实际应用中,开发者在使用这些库文件时,通常需要遵循以下步骤: 1. **解压**:首先,将名为"libs...

Global site tag (gtag.js) - Google Analytics