是否可以使用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 API进行XML处理时,我想知道哪些对象可以重用(在相同或不同的文档中),JAXP:
DocumentBuilderFactory
DocumentBuilder
XPath
Node
ErrorHandler
是否建议缓存这些对象或者JAXP实现是否已经缓存它们?
这些对象的(重新)使用是否是线程安全的?
我想问一下您测试Java EE代码的首选方法?
我发现只有三个项目,它们试图帮助在Java EE环境中编写单元测试代码:
所以我想,
非常感谢...
该类com.sun.xml.bind.v2.model.annotation.AnnotationReader
是jaxb-impl 2.1.6的一部分,但已在2.1.7中删除.有人知道为什么吗?
我有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中,还是两者都包含在内?
我是新手在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一样,所以我假设我必须设置错误.有人能指出我正确的方向吗?谢谢!
在系统测试中最近部署之后,我们的一个servlet比平时受到更大的打击,我们注意到内存开始攀升,weblogic最终会死亡.我的实习生,我非常自豪,发现了内存泄漏的来源.
每当请求进入时,都会调用此行:
JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,对象永远不会被垃圾收集.一旦我们将它静态化并移动到我们初始化它的位置,我们的内存泄漏便消失了.
我们的另一个开发人员在独立的Java应用程序中将该行放在while循环中,并且还看到了内存蠕变.
有没有人有任何想法为什么该对象不会被垃圾收集?
谢谢
我正在使用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) 我正在尝试使用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) java ×7
jaxb ×6
eclipselink ×2
xml ×2
annotations ×1
caching ×1
ejb-3.0 ×1
glassfish ×1
inheritance ×1
jakarta-mail ×1
java-ee ×1
java-ee-5 ×1
java-ee-6 ×1
jax-ws ×1
jaxb2 ×1
jaxp ×1
junit ×1
logging ×1
memory-leaks ×1
moxy ×1
namespaces ×1
properties ×1
unit-testing ×1
web-services ×1