小编Mic*_*ael的帖子

默认XML命名空间,JDOM和XPath

我想使用JDOM读取XML文件,然后使用XPath从JDOM文档中提取数据.它创建了Document对象,但是当我使用XPath查询Document的元素列表时,我什么也得不到.

我的XML文档在根元素中定义了一个默认命名空间.有趣的是,当我删除默认命名空间时,它成功运行XPath查询并返回我想要的元素.还有什么办法让我的XPath查询返回结果?

XML:

<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.foo.com">
<dvd id="A">
  <title>Lord of the Rings: The Fellowship of the Ring</title>
  <length>178</length>
  <actor>Ian Holm</actor>
  <actor>Elijah Wood</actor>
  <actor>Ian McKellen</actor>
</dvd>
<dvd id="B">
  <title>The Matrix</title>
  <length>136</length>
  <actor>Keanu Reeves</actor>
  <actor>Laurence Fishburne</actor>
</dvd>
</collection>
Run Code Online (Sandbox Code Playgroud)

Java的:

public static void main(String args[]) throws Exception {
    SAXBuilder builder = new SAXBuilder();
    Document d = builder.build("xpath.xml");
    XPath xpath = XPath.newInstance("collection/dvd");
    xpath.addNamespace(d.getRootElement().getNamespace());
    System.out.println(xpath.selectNodes(d));
}
Run Code Online (Sandbox Code Playgroud)

java xml xpath jdom

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

GWT:将原始HTML放在Label中

有没有办法将原始HTML放入LabelGWT 的小部件中?构造函数和setText()方法自动转义HTML的文本(因此<显示为&lt;等).

我需要的是:

String matched = "two";
List<String> values = Arrays.asList("one", "two", "three");
StringBuilder sb = new StringBuilder();
for (String v : values){
  if (v.equals(matched)){
    sb.append("<b>" + v + "<b>");
  } else {
    sb.append(v);
  }
  sb.append(", ");
}
Label label = new Label();
label.setRawText(sb.toString());
//div contains the following HTML: "one, <b>two</b>, three, "
Run Code Online (Sandbox Code Playgroud)

我想输出以逗号分隔的字符串列表,但我希望其中一个字符串加粗.谢谢.

java gwt

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

从Java Web应用程序中的库JAR覆盖类文件

在我的Java Web应用程序中,我有以下文件:

/WEB-INF/classes/com/example/Foo.class
/WEB-INF/lib/example.jar <-- contains the class "com.example.Foo"
Run Code Online (Sandbox Code Playgroud)

是否将classes使用目录中定义的类而不是在example.jar?中定义的类?

谢谢.

java jar classpath java-ee

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

ClassLoader.getSystemResourceAsStream和getClass()之间的区别.getResourceAsStream()

鉴于此代码:

/* 1 */ InputStream in1 = ClassLoader.getSystemResourceAsStream("foobar.txt");
/* 2 */ InputStream in2 = this.getClass().getResourceAsStream("/foobar.txt");
Run Code Online (Sandbox Code Playgroud)

两者都返回相同的资源(我认为答案是"是")?

他们都访问"相同"的类路径吗?为什么#1中的方法名称"获取System ResourceAsStream",但对于#2,它只是"getResourceAsStream"?

谢谢

java

9
推荐指数
2
解决办法
7586
查看次数

无法用Java编写XML 1.1文档

你如何用Java编写XML 1.1版文档?Java似乎只支持1.0版.

我尝试使用OutputKeys.VERSIONoutput属性,如下所示,但是没有效果:

DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder db = fact.newDocumentBuilder();
Document doc = db.newDocument();

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.VERSION, "1.1");

DOMSource source = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);

System.out.println(writer.toString());
//still produces a 1.0 XML document
Run Code Online (Sandbox Code Playgroud)

我在以下JVM中测试了上面的代码:

  • Linux:OpenJDK运行时环境(IcedTea 2.5.5)(7u79-2.5.5-1~deb7u1)
  • Linux:Java(TM)SE运行时环境(版本1.8.0_25-b17)

如果可能的话,我宁愿不必包含任何外部库.谢谢.

java xml

8
推荐指数
1
解决办法
709
查看次数

GWT:在服务器代码中访问i18n消息

我有一个扩展com.google.gwt.i18n.client.Messages类的接口,我用它来检索我的GWT应用程序中的i18n消息.它看起来像这样:

public interface MyMessages extends com.google.gwt.i18n.client.Messages {
  @DefaultMessage("Hello world")
  @Key("message1")
  String message1();

  @DefaultMessage("Hello again")
  @Key("message2")
  String message2();

  //...
}
Run Code Online (Sandbox Code Playgroud)

通常,我使用GWT.create()如下所示创建它的实例:

private MyMessages messages = GWT.create(MyMessages.class);
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于服务器端代码,只能用于客户端代码(它会抛出错误,说GWT.create()仅在客户端代码中可用).

类似问题的答案指向一个单独的库,您可以下载它可以让您访问服务器上的i18n消息,但我不想下载任何额外的库(这似乎是一个简单的问题,必须有一个简单解决方案).

总结:如何在服务器端代码中访问我的i18n消息? 谢谢.

java gwt

7
推荐指数
1
解决办法
4845
查看次数

使用JAX-WS构建大型MTOM/XOP消息

我有一个关于在JAX-WS中使用MTOM/XOP的问题.我正在编写一个发送大量二进制数据的Web服务.客户端请求许多文件,服务器返回响应中的文件.

我能够正确地构建响应,以便正确实现XOP,但我遇到了与内存相关的问题,因为它在发送之前将整个响应存储在内存中.此Web服务发送的文件可能会变得非常大(如giga-bytes large),因此将响应存储在内存中不是一种选择.

此Oracle网站(并沿此一个),似乎解决了这个问题,但我只是不明白.我认为他们使用一个DataHandler对象来传输请求/响应,但我无法弄清楚它们如何实例化它.

我正在使用现有的WSDL生成我的JAX-WS类文件wsimport.我正在使用JAX-WS RI 2.1.6和Java 6.

我如何在建立响应时发送响应而不必先存储在内存中?

在此先感谢您的帮助.


更新12月17日:我将以下属性添加到包含二进制数据的WSDL中的schema元素.这会导致wsimportDataHandler对象添加到JAXB类.FileDataHandler然后可以将A 添加到响应中,而不是添加文件的全部内容,从而允许服务器流式传输每个文件的内容,而不是将它们全部保存在内存中:

xmlns:xmime="http://www.w3.org/2005/05/xmlmime" 
xmime:expectedContentTypes="application/octet-stream"
Run Code Online (Sandbox Code Playgroud)

因此,服务器现在正确地构建响应,并且客户端在收到请求时正确地将每个文件保存到磁盘.但是,客户端仍然会出于某种原因将整个响应读入内存.


服务器代码(SIB):

@MTOM
@StreamingAttachment(parseEagerly = true, memoryThreshold = 4000000L) 
@WebService(...)
public class DownloadFilesPortTypeImpl implements DownloadFilesPortType {
 @Override
 public FileSetResponseType downloadFileSet(FileSetRequestType body) {
        FileSetResponseType response = new FileSetResponseType();
        for (FileRequest freq : body.getFileRequest()){
            try{
                //find the file on disk
                File file = findFile(freq.getFileId());

                //read the file data into memory …
Run Code Online (Sandbox Code Playgroud)

java soap mtom jax-ws xop

6
推荐指数
1
解决办法
9650
查看次数

GWT Maven插件:在Messages类中生成非String参数

我的"Messages.properties"文件中有一个属性,它有一个使用数字格式的参数:

my.message=File exceeds {0,number,0.0}MB.
Run Code Online (Sandbox Code Playgroud)

当我运行gwt:i18nMaven目标时,它会Messages根据我的"Messages.properties"文件中的属性生成一个接口(正常情况下):

public interface Messages extends com.google.gwt.i18n.client.Messages {
  //...

  @DefaultMessage("File exceeds {0,number,0.0}MB.")
  @Key("my.message")
  String my_message(String arg0);

  //...
}
Run Code Online (Sandbox Code Playgroud)

问题是方法参数是a String.当我运行应用程序时,它给了我一个错误,因为message参数需要一个数字,但是提供了一个String(错误消息是,"Only Number子类可以被格式化为数字").

如何配置Maven让它将此参数更改为数字(如a floatNumber)?谢谢.

java gwt maven

6
推荐指数
1
解决办法
1162
查看次数

在Freemarker模板中编码base64

有没有办法在Freemarker模板中将字节数组转换为base64?就像是:

<img src="data:image/jpeg;base64,${photo.data?base64}" />
Run Code Online (Sandbox Code Playgroud)

谢谢.

java base64 freemarker

5
推荐指数
1
解决办法
3741
查看次数

在Spring应用程序上下文文件中定义列表

您可以在不使用该<list>元素的情况下在Spring application-context.xml文件中创建List 吗?

我有一个bean,其构造函数接受一个Collection对象,我想通过"value"属性传递整个列表.原因是此值来自.properties文件,您无法在.properties文件中定义列表.

我想做这样的事情......有可能吗?

MyClass.java:

public class MyClass{
  public MyClass(Collection<String> collection){ /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

应用程序的context.xml:

<bean name="myBean" class="com.company.MyClass">
  <constructor-arg value="${the.value}" />
</bean>
Run Code Online (Sandbox Code Playgroud)

.properties文件:

the.value=item1,item2,item3
Run Code Online (Sandbox Code Playgroud)

谢谢.

java spring

3
推荐指数
1
解决办法
3089
查看次数

标签 统计

java ×10

gwt ×3

xml ×2

base64 ×1

classpath ×1

freemarker ×1

jar ×1

java-ee ×1

jax-ws ×1

jdom ×1

maven ×1

mtom ×1

soap ×1

spring ×1

xop ×1

xpath ×1