我有一个JAX-RS webservice(Jersey),它是JPA(EclipseLink)实体的CRUD接口.我的实体是从数据库表中自动生成的,我使用JAXB注释对它们进行了注释,以便可以将它们编组到/从XML进行编组/解组.我的资源方法将JAXBElement对象作为必需的参数.
我没有XSD,但是,我愿意写一个来验证请求中收到的XML.但是,我不知道如何启动验证.Jersey会自动处理编组/解组,我发现的有关验证的任何参考都是在该级别完成的.
有人知道一个示例/教程,说明如何做到这一点?
谢谢!
我希望在部署应用程序(使用业务逻辑,EJB和客户端,Web的企业应用程序)后立即执行某些操作.例如,我想让一些实体处于持久状态,或者创建一个文件.我怎样才能做到这一点?
谢谢.
JAXB几乎没有问题.
鉴于:
需要
获取完全代表xml的java对象(根元素)以及默认值初始化的每个成员.
当我尝试在没有显式设置值的情况下编组xml时,默认值不会出现...是否有任何方法可以使用默认值编组xml而无需自定义生成的类?
.xsd的示例:
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="d_int"/>
<xs:element ref="d_double"/>
<xs:element ref="d_string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="d_int" type="xs:int" default="-1"/>
<xs:element name="d_double" type="xs:double" default="-1.0"/>
<xs:element name="d_string" type="xs:string" default="false"/>
Run Code Online (Sandbox Code Playgroud)
和java类:
public class Document {
@XmlElement(name = "d_int", defaultValue = "-1")
protected int dInt;
@XmlElement(name = "d_double", defaultValue = "-1.0")
protected double dDouble;
@XmlElement(name = "d_string", required = true, defaultValue = "Default")
protected …Run Code Online (Sandbox Code Playgroud) 我有一个示例课程:
class Zoo {
public Collection<? extends Animal> animals;
}
Run Code Online (Sandbox Code Playgroud)
当使用MOXy序列化时,我得到:
{
"bird": [
{
"name": "bird-1",
"wingSpan": "6 feets",
"preferredFood": "food-1"
}
],
"cat": [
{
"name": "cat-1",
"favoriteToy": "toy-1"
}
],
"dog": [
{
"name": "dog-1",
"breed": "bread-1",
"leashColor": "black"
}
]
}
Run Code Online (Sandbox Code Playgroud)
为什么它使用数组指示符"[]",而鸟,猫和狗不是数组?第二,有没有办法摆脱"鸟","猫"和"狗"?
换句话说,我试图去:
{
{
"name": "bird-1",
"wingSpan": "6 feets",
"preferredFood": "food-1"
}
,
{
"name": "cat-1",
"favoriteToy": "toy-1"
}
,
{
"name": "dog-1",
"breed": "bread-1",
"leashColor": "black"
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,Behzad
我有这个测试课
import javax.xml.bind.annotation.XmlElement;
class CompileTest {
void foo( @XmlElement String in ) {
}
}
Run Code Online (Sandbox Code Playgroud)
我的java版本是
$ java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
当我尝试编写那个我正在学习的课程时
javac CompileTest.java
CompileTest.java:5: annotation type not applicable to this kind of declaration
void foo( @XmlElement String in ) {
^
1 error
Run Code Online (Sandbox Code Playgroud)
这对Java 6有效.当我尝试将更新的JAXB库添加到类路径时,它没有帮助.有办法解决这个问题吗?
javac -cp jaxb-api-2.2.4.jar CompileTest.java
Run Code Online (Sandbox Code Playgroud) 我想构建一个Java EE应用程序(EAR),它不仅提供Web服务(WAR)或直接JMS请求(EJB),而且我还想接受套接字请求(例如UDP数据包).
我尝试用java.net.DatagramSocket编写一个监听器,让它作为单独的进程运行,并将请求重定向到我的EAR应用程序.
问题是..如何无缝地将这样的套接字侦听器构建到我的Java EE(EAR)应用程序中?
谢谢.
我正在使用JAXB 2.0 JDK 6来将XML实例解组为POJO.
为了添加一些自定义验证,我已经将一个验证调用插入到属性的setter中,尽管它是私有的,但似乎unmarshaller不会调用setter但直接修改私有字段.
对我来说,每个unmarshall调用都会针对此特定字段进行自定义验证,这一点至关重要.
我该怎么办?
码:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "LegalParams", propOrder = {
"value"
})
public class LegalParams {
private static final Logger LOG = Logger.getLogger(LegalParams.class);
@XmlTransient
private LegalParamsValidator legalParamValidator;
public LegalParams() {
try {
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
LegalParamsFactory legalParamsFactory = (LegalParamsFactory) webApplicationContext.getBean("legalParamsFactory");
HttpSession httpSession = SessionHolder.getInstance().get();
legalParamValidator = legalParamsFactory.newLegalParamsValidator(httpSession);
}
catch (LegalParamsException lpe) {
LOG.warn("Validator related error occurred while attempting to construct a new instance of LegalParams");
throw new IllegalStateException("LegalParams creation failure", lpe);
}
catch (Exception …Run Code Online (Sandbox Code Playgroud) 我正在尝试学习Java EE,从MVC架构中的Servlet和JSP开始.我知道Servlet经常被用作控制器,JSP经常被用作视图,并且这些都与模型(服务器上的后端java应用程序)交互.我问的问题是后端应用程序将包含什么.它只不过是一个使用Servlet和JSP作为接口的简单JSE应用程序吗?
另外,考虑到我在问什么可能是一个简单的问题,我可以使用一个很好的Java EE MVC教程吗?
我正在使用JAXB开发一个项目,但是我遇到了一个JAXB和char数据类型的小问题.
char gender = 'M';
Run Code Online (Sandbox Code Playgroud)
编组后转换为:
<gender>77</gender>
Run Code Online (Sandbox Code Playgroud)
所以我认为char被映射到整数,但我只想将它映射到String.我怎样才能做到这一点?它甚至可能吗?
我正在使用作为Jersey JAX-RS一部分的JAXB.当我为输出类型请求JSON时,我的所有属性名称都以这样的星号开头,
这个对象;
package com.ups.crd.data.objects;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
@XmlType
public class ResponseDetails {
@XmlAttribute public String ReturnCode = "";
@XmlAttribute public String StatusMessage = "";
@XmlAttribute public String TransactionDate ="";
}
Run Code Online (Sandbox Code Playgroud)
成为这个,
{"ResponseDetails":{"@transactionDate":"07-12-2010",
"@statusMessage":"Successful","@returnCode":"0"}
Run Code Online (Sandbox Code Playgroud)
那么,为什么名字中有@?
java ×9
jaxb ×6
java-ee ×3
eclipselink ×2
jersey ×2
json ×2
char ×1
deployment ×1
entity ×1
jax-rs ×1
marshalling ×1
moxy ×1
primitive ×1
setter ×1
sockets ×1
startup ×1
validation ×1
xsd ×1