小编bdo*_*han的帖子

Java/JAXB:根据属性将Xml解组为特定的子类

是否可以使用JAXB根据xml的属性将xml解组为特定的Java类?

<shapes>
  <shape type="square" points="4" square-specific-attribute="foo" />
  <shape type="triangle" points="3" triangle-specific-attribute="bar" />
</shapes>
Run Code Online (Sandbox Code Playgroud)

我想有一个包含三角形和正方形的Shape对象列表,每个对象都有自己的特定于形状的属性.IE:

abstract class Shape {
    int points;
    //...etc
}

class Square extends Shape {
    String square-specific-attribute;
    //...etc
}

class Triangle extends Shape {
    String triangle-specific-attribute;
    //...etc
}
Run Code Online (Sandbox Code Playgroud)

我目前只是将所有属性放在一个大的"Shape"类中,并且它不太理想.

如果形状被恰当地命名为xml元素,我可以让它工作,但不幸的是我无法控制我正在检索的xml.

谢谢!

java inheritance jaxb eclipselink

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

Java和XML(JAXP) - 缓存和线程安全怎么样?

  1. 在使用Java API进行XML处理时,我想知道哪些对象可以重用(在相同或不同的文档中),JAXP:

    • DocumentBuilderFactory
    • DocumentBuilder
    • XPath
    • Node
    • ErrorHandler (编辑:我忘了这必须在我自己的代码中实现,抱歉)
  2. 是否建议缓存这些对象或者JAXP实现是否已经缓存它们?

  3. 这些对象的(重新)使用是否是线程安全的

java xml multithreading caching jaxp

26
推荐指数
1
解决办法
7554
查看次数

你如何对Java EE代码进行单元测试?

我想问一下您测试Java EE代码的首选方法?

我发现只有三个项目,它们试图帮助在Java EE环境中编写单元测试代码:

所以我想,

  • 是否有任何框架帮助编写(j)Java EE代码的单元测试?
  • 你使用嵌入式Java EE服务器,如jboss或glassfish v3?
  • 你自己模拟和注射吗?

非常感谢...

java junit unit-testing ejb-3.0 java-ee-5

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

为什么从JAXB参考实现中删除了AnnotationReader?

该类com.sun.xml.bind.v2.model.annotation.AnnotationReader是jaxb-impl 2.1.6的一部分,但已在2.1.7中删除.有人知道为什么吗?

jaxb jaxb2

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

哪里包含jaxb.properties文件?

我有REST(Jersey)webservice,它使用了一些编组/解组到XML的数据对象.数据对象位于Web服务战争所依赖的单独项目/ jar中.

我正在使用MOXy作为我的JAXB实现,因为我正在部署到Glassfish并且已经包含了.我知道我需要一个jaxb.properties文件来使用此条目将JAXB实现设置为MOXy:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Run Code Online (Sandbox Code Playgroud)

问题是,jaxb.properties文件是否应该包含在数据对象jar或webservice war中,还是两者都包含在内?

properties jaxb eclipselink moxy

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

Jaxb:在同一个包中解组带有多个名称空间的xml

我是新手在xml中使用命名空间所以我有点困惑,想要一些澄清.我有一个java服务,我接收带有许多不同名称空间的xml文档,当我使用它时,我觉得我必须做错了所以我想检查.在我的package-info.java中,我有我的模式注释,例如:

@javax.xml.bind.annotation.XmlSchema(
    xmlns={
        @javax.xml.bind.annotation.XmHS(prefix="train", namespaceURI="http://mycompany/train"), 
        @javax.xml.bind.annotation.XmHS(prefix="passenger", namespaceURI="http://mycompany/passenger")
    }, 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm=QUALIFIED
)
Run Code Online (Sandbox Code Playgroud)

我在类级别上有一个Train.java注释:

@XmlRootElement(name="Train", namespace="http://mycompany/train")
Run Code Online (Sandbox Code Playgroud)

并且类中的每个字段都注释为:

@XmlElement(name="Color") for example
Run Code Online (Sandbox Code Playgroud)

火车包含一个乘客名单,所以有一个属性

private Set<Passenger> passengers;
Run Code Online (Sandbox Code Playgroud)

此集合注释为:

@XmlElementWrapper(name="Passengers")
@XmlElements(@XmlElement(name="Passenger", namespace="http://mycompany/passenger"))
Run Code Online (Sandbox Code Playgroud)

然后在Passenger.java中,类本身注释为:

@XmlElement(name="Passenger", namespace="http://mycompany/passenger")
Run Code Online (Sandbox Code Playgroud)

最后,对于Passenger.java中的各个字段,它们的注释如下:

@XmlElement(name="TicketNumber", namespace="http://mycompany/passenger")
Run Code Online (Sandbox Code Playgroud)

所以,当我有一个看起来像这样的xml:

<train:Train>
   <train:Color>Red</train:Color>
   <train:Passengers>
       <train:Passenger>
           <passenger:TicketNumber>T101</passenger:TicketNumber>
       </train:Passenger>
   </train:Passengers>
</train:Train>
Run Code Online (Sandbox Code Playgroud)

现在我解组我收到的这个xml并设置了Train的Color属性并设置了Passenger的TicketNumber属性.但是我不知道为什么我需要在TicketNumber上的XmlElement注释上添加名称空间url才能工作,但我不需要为Train上的Color属性这样做.如果我从TicketNumber上的XmlElement注释中删除namespace属性,则xml中的值不会映射到该对象,除非我还从xml请求中删除了名称空间前缀.我觉得因为我已经在XmlRootElement for Passenger上定义了namespace属性,所以我不应该为类中的每个字段都这样做,就像我没有为Train一样,所以我假设我必须设置错误.有人能指出我正确的方向吗?谢谢!

java xml annotations namespaces jaxb

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

JDK = Java SE && JDK!= Java EE?

请确认以上声明?

当他们提到JDK时我需要知道他们指的是什么.

java

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

JAXBContext.newInstance内存泄漏

在系统测试中最近部署之后,我们的一个servlet比平时受到更大的打击,我们注意到内存开始攀升,weblogic最终会死亡.我的实习生,我非常自豪,发现了内存泄漏的来源.

每当请求进入时,都会调用此行:

JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,对象永远不会被垃圾收集.一旦我们将它静态化并移动到我们初始化它的位置,我们的内存泄漏便消失了.

我们的另一个开发人员在独立的Java应用程序中将该行放在while循环中,并且还看到了内存蠕变.

有没有人有任何想法为什么该对象不会被垃圾收集?

谢谢

java memory-leaks java-metro-framework jaxb

13
推荐指数
1
解决办法
9166
查看次数

Java:JAX-WS Mapping

我正在使用JAX-WS进行Web服务.

每当我使用char作为方法参数时,我将它作为xsd中的unsignedShort(Focus on weatherLetter).

这是宣言:

@WebMethod
public boolean setWXtatus(
        @WebParam(name = "weatherLetter") char weatherLetter,
        @WebParam(name = "weatherDigit") int weatherDigit,
        @WebParam(name = "cloudCover") int cloudCover,
        @WebParam(name = "cloudBaseInHundredsOfFeet") int cloudBaseInHundredsOfFeet,
        @WebParam(name = "pressureInHg") int pressureInHg,
        @WebParam(name = "visibilityInKm") int visibilityInKm,
        @WebParam(name = "windSpeed") int windSpeed,
        @WebParam(name = "windDirection") int windDirection,
        @WebParam(name = "lastUpdateHour") int lastUpdateHour,
        @WebParam(name = "lastUpdateMin") int lastUpdateMin
) 
Run Code Online (Sandbox Code Playgroud)

这是我得到的类型映射:

<xs:complexType name="setWXStatus">
<xs:sequence>
<xs:element name="weatherLetter" type="xs:unsignedShort" minOccurs="0"/>
<xs:element name="weatherDigit" type="xs:int"/>
<xs:element name="cloudCover" type="xs:int"/>
<xs:element name="cloudBaseInHundredsOfFeet" type="xs:int"/>
<xs:element name="pressureInHg" type="xs:int"/> …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws jaxb java-ee

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

JavaMail的DCH类错误

我正在尝试使用Glassfish 3.1提供的jar文件在Java EE 6中使用JavaMail设置简单的日志记录测试.关于这个问题似乎有很多问题,但我还没有找到任何有帮助的答案.我的测试代码如下所示:

import java.util.logging.Logger;

public class MyClass {
  private static final Logger LOGGER = Logger.getLogger("MyClass");

  public static void main(String[] args) {
    LOGGER.severe("This is a test");
  }
}
Run Code Online (Sandbox Code Playgroud)

我的logging.properties文件包含以下内容:

com.sun.mail.util.logging.MailHandler.mail.smtp.host={my mail hub FQDN}
com.sun.mail.util.logging.MailHandler.mail.smtp.port=25
com.sun.mail.util.logging.MailHandler.mail.to={me}
com.sun.mail.util.logging.MailHandler.mail.from={support address}
com.sun.mail.util.logging.MailHandler.level=WARNING
com.sun.mail.util.logging.MailHandler.verify=local
com.sun.mail.util.logging.MailHandler.subject=Application Error
com.sun.mail.util.logging.MailHandler.formatter=java.util.logging.SimpleFormatter
Run Code Online (Sandbox Code Playgroud)

我使用以下方法构建类:

javac -cp $AS_INSTALL/glassfish/modules/javax.mail.jar:$AS_INSTALL/install/lib/external/jaxb/activation.jar:. MyClass.java
Run Code Online (Sandbox Code Playgroud)

然后我运行程序使用:

java -cp $AS_INSTALL/glassfish/modules/javax.mail.jar:$AS_INSTALL/install/lib/external/jaxb/activation.jar:. -Djava.util.logging.config.file=logging.properties MyClass
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

Sep 22, 2011 4:19:25 PM MyClass main
SEVERE: This is a test
java.util.logging.ErrorManager: 3: SEVERE: no object DCH for MIME type multipart/mixed;
        boundary="----=_Part_1_26867996.1316722766145"
javax.activation.UnsupportedDataTypeException: no …
Run Code Online (Sandbox Code Playgroud)

logging glassfish jakarta-mail java-ee-6

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