小编iva*_*off的帖子

JAXB:我应该如何编组复杂的嵌套数据结构?

我有几个复杂的数据结构,如

Map< A, Set< B > >
Set< Map< A, B > >
Set< Map< A, Set< B > > >
Map< A, Map< B, Set< C > > >
and so on (more complex data structures)
Run Code Online (Sandbox Code Playgroud)

注意:在我的情况下,如果我使用Set或List并不重要.

现在我知道JAXB允许我定义XmlAdapter,这没关系,但我不想为每个给定的数据结构定义一个XmlAdapter(它只是太多的复制和粘贴代码).

我试图通过声明两个泛化XmlAdapter来实现我的目标:

  • 一个地图: MapAdapter<K,V>
  • Set一套: SetAdapter<V>

问题:
JAXB抱怨如下:

javax.xml.bind.JAXBException:
class java.util.Collections$UnmodifiableMap nor any of its
  super class is known to this context.
Run Code Online (Sandbox Code Playgroud)

这是我的适配器类:

import java.util.*;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.adapters.*;

public class Adapters {

public final static class MapAdapter<K, V> …
Run Code Online (Sandbox Code Playgroud)

java xml data-binding jaxb data-structures

32
推荐指数
2
解决办法
6万
查看次数

Java反射:如何在运行时覆盖或生成方法?

在普通Java中,可以在运行时以编程方式覆盖类的方法(甚至创建新方法)?

即使我在编译时知道类,我希望能够这样做.

我在运行时重写的意思是:

abstract class MyClass{
  public void myMethod();
}

class Overrider extends MyClass{
  @Override
  public void myMethod(){}
}

class Injector{
  public static void myMethod(){ // STATIC !!!
    // do actual stuff
  }
}

// some magic code goes here
Overrider altered = doMagic(
    MyClass.class, Overrider.class, Injector.class);
Run Code Online (Sandbox Code Playgroud)

现在,这个调用......

altered.myMethod();
Run Code Online (Sandbox Code Playgroud)

...将调用Injector.myMethod()而不是Overrider.myMethod().

Injector.myMethod()是静态的,因为在执行"magic"之后,它会从不同的类实例(它是Overrider)调用,(因此我们阻止它访问本地字段).

java reflection code-generation runtime

25
推荐指数
4
解决办法
3万
查看次数

Swing:创建一个可拖动的组件......?

我在网上搜索了可拖动的Swing组件的例子,但我发现了不完整或不工作的例子.

我需要的是一个Swing组件,可以通过鼠标在其他组件内拖动.在被拖动时,它应该已经改变了它的位置,而不仅仅是"跳"到目的地.

我希望能够在没有非标准API的情况下工作的示例.

谢谢.

java swing drag-and-drop draggable

20
推荐指数
1
解决办法
1万
查看次数

Java:获得一个/所有可用监视器(而不是整个桌面)的分辨率?

我有两个不同大小的显示器,使用(我相信)TwinView连接在一起.

我试过了

System.out.println(Toolkit.getDefaultToolkit().getScreenSize());
Run Code Online (Sandbox Code Playgroud)

得到

java.awt.Dimension[width=2960,height=1050]
Run Code Online (Sandbox Code Playgroud)

如果你将两个显示器统计在一起,这是真的.

取而代之的是,我希望能够实现以下目标之一:

  • 获得当前监视器的分辨率
  • 获得主显示器的分辨率

java user-interface swing awt

18
推荐指数
1
解决办法
6157
查看次数

JSR305与JSR308(Java类型Anotations) - 哪个将成为标准?

似乎有两种不同的JSR用于注释.

JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)

两者似乎都面向静态代码分析.

你知道吗:

  • 哪两个都将在Java SE 7或Java EE 6中?
  • 每个JSR的"稳定"程度如何?
  • 那个人是否取代(或过时)另一个人?

java jsr305 java-7

18
推荐指数
2
解决办法
7095
查看次数

Java + DOM:如何设置(已创建)Document的基本命名空间?

我正在处理一个已经创建的 Document对象.我必须能够将它的基本命名空间(属性名称"xmlns")设置为特定值.我的输入是DOM,类似于:

<root>...some content...</root>
Run Code Online (Sandbox Code Playgroud)

我需要的是DOM,它类似于:

<root xmlns="myNamespace">...some content...</root>
Run Code Online (Sandbox Code Playgroud)

而已.容易,不是吗?错误!没有DOM!

我尝试过以下方法:

1)使用doc.getDocumentElement().setAttribute("xmlns","myNamespace")

我得到一个空xmlns的文档(它适用于任何其他属性名称!)

<root xmlns="">...</root>
Run Code Online (Sandbox Code Playgroud)

2)使用renameNode(...)

首先克隆文档:

Document input = /*that external Document whose namespace I want to alter*/;

DocumentBuilderFactory BUILDER_FACTORY_NS = DocumentBuilderFactory.newInstance();
BUILDER_FACTORY_NS.setNamespaceAware(true);
Document output = BUILDER_NS.newDocument();
output.appendChild(output.importNode(input.getDocumentElement(), true));
Run Code Online (Sandbox Code Playgroud)

我真的很想念document.clone(),但也许只是我.

现在重命名根节点:

output.renameNode(output.getDocumentElement(),"myNamespace",
    output.getDocumentElement().getTagName());
Run Code Online (Sandbox Code Playgroud)

现在不是那么简单吗?;)

我现在得到的是:

<root xmlns="myNamespace">
    <someElement xmlns=""/>
    <someOtherElement xmlns=""/>
</root>
Run Code Online (Sandbox Code Playgroud)

那么(正如我们所有人所期望的那样,对吧?),这只重命名根节点的命名空间.

诅咒你,DOM!

有没有办法以递归方式执行此操作(无需编写自己的递归方法)?

请帮忙 ;)

请不要建议我做一些花哨的解决方法,例如将DOM转换为其他内容,在那里更改命名空间,然后将其转换回来.我需要DOM,因为它是操作XML的最快标准方法.

注意:我正在使用最新的JDK.

编辑
从问题中删除了错误的假设,这与假名前缀有关.

java xml dom document namespaces

18
推荐指数
3
解决办法
3万
查看次数

我可以动态卸载和重新加载(相同的其他版本)JAR吗?

我正在编写一个服务器程序,用于运行API的单元测试 (显示大量信息并提供Web访问来控制/监控整个事物)...

该API 在编译期间为服务器所知,并作为JAR提供.

为了能够比较不同版本 API的单元测试结果(无需重新启动服务器),我希望能够卸载API的"当前"版本,并重新加载较新版本(或较旧的版本) .

我不想使用URLClassLoader并按名称
(使用 getDeclaredMethod("someMethod"))调用每个方法,
因为服务器在很大程度上依赖于API,并且以这种脏的方式"包装"每个方法调用会很复杂.

我在想:由于JAR 的所有版本的所有接口都是相同的,我不能通过某种方式重新加载其他版本的JAR(没有那个by-name-invokation?).

注意:我使用的是最新的Java SE(6)和Java EE(5).

如果您认为,我想要达到的目标是不可能的,请提出"解决方法"或不同的概念.

java jar java-ee

17
推荐指数
3
解决办法
3万
查看次数

通过重用基本Bézier曲线函数绘制Bézier曲线的一部分?

假设我正在使用一些图形API,它允许我通过指定4个必要点来绘制贝塞尔曲线: 开始,结束,两个控制点.

我可以重复使用此功能来绘制"原始"曲线的x%(通过调整控制点和终点)吗?

还是不可能?

不必要的信息,如果有人关心:

  • 我需要用整个东西来绘制
    具有不同颜色和/或线条样式的原始贝塞尔曲线的每一个n%
  • 我正在使用Java的Path2D绘制贝塞尔曲线:

    Path2D p = new GeneralPath();
    p.moveTo(x1, y1);
    p.curveTo(bx1, by1, bx2, by2, x2, y2);
    g2.draw(p);
    
    Run Code Online (Sandbox Code Playgroud)

math graphics drawing coordinates

13
推荐指数
2
解决办法
4525
查看次数

EXI(高效的XML交换)即将推出...... XML API准备好了吗?

W3的EXI(高效XML交换)将标准化.它声称是"最后的二进制标准".

它是存储针对处理和存储而优化的XML数据的标准,与XML模式捆绑在一起(使数据具有强类型和强结构).嗯,有很多声称的优点.处理和内存效率测量给我留下了深刻的印象.

我问自己,所有已建立的XML API会发生什么?

这段与我的问题有关:

4.2现有的XML处理API

由于EXI是XML Infoset的编码,EXI实现可以支持任何常用的XML API进行XML处理,因此EXI对现有的XML API没有直接影响.但是,使用现有的XML API还要求将EXI文档中出现的所有名称和文本转换为字符串.将来,如果较高层可以直接将这些数据用作EXI文档中出现的类型值,则可以实现更高的效率.例如,如果较高层需要类型化数据,则通过其字符串形式会产生性能损失,因此直接支持类型化数据的扩展API可以在与EXI一起使用时提高性能.

来自:http://www.w3.org/TR/exi-impacts/

我理解如下:"将EXI与现有API一起使用?没有性能提升!(除非你全部重写)"

我们以Java生态系统为例:

我们有大量的XML API的最新的JDK 6(每个主要JDK版本中,越来越多的人加入.)据我判断,大部分(如果不是全部),他们使用的是内存中的DOM树,或序列化("文本")表示来转换/处理/验证/ ... XML数据.

你们怎么想?这些API会在引入EXI后发生什么?

谢谢大家的意见.

对于那些不了解EXI的人:http://www.w3.org/XML/EXI/

xml api web-standards exi

12
推荐指数
1
解决办法
5237
查看次数

如何使用JSP列出服务器目录的内容?

编写JSP文件时,如何在运行时获取此文件的当前目录
(以便能够迭代目录并列出其内容)?

由于某些安全问题,是否会限制某些文件I/O操作?

我更喜欢没有访问某些特定于实现的服务器变量/属性的解决方案.

编辑:
我不会问它是否如此简单new File("."),因为这只会给出服务器可执行文件的目录.

java jsp file

11
推荐指数
2
解决办法
3万
查看次数