小编bdo*_*han的帖子

在JPA/JAX-RS Web Service中验证JAXBElement

我有一个JAX-RS webservice(Jersey),它是JPA(EclipseLink)实体的CRUD接口.我的实体是从数据库表中自动生成的,我使用JAXB注释对它们进行了注释,以便可以将它们编组到/从XML进行编组/解组.我的资源方法将JAXBElement对象作为必需的参数.

我没有XSD,但是,我愿意写一个来验证请求中收到的XML.但是,我不知道如何启动验证.Jersey会自动处理编组/解组,我发现的有关验证的任何参考都是在该级别完成的.

有人知道一个示例/教程,说明如何做到这一点?

谢谢!

java validation jaxb jersey eclipselink

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

Java EE企业应用程序:在部署/启动时执行一些操作

我希望在部署应用程序(使用业务逻辑,EJB和客户端,Web的企业应用程序)后立即执行某些操作.例如,我想让一些实体处于持久状态,或者创建一个文件.我怎样才能做到这一点?

谢谢.

java deployment entity startup java-ee

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

使用默认值初始化JAXB对象

JAXB几乎没有问题.


鉴于:

  • Java 1.5; 来自jaxws-2_0的jaxb -jars.
  • .xsd方案和生成的JAXB类.
  • .xsd中的每个简单元素都有默认值.因此,类成员的注释类似于" @XmlElement(name ="cl_fname",required = true,defaultValue ="[ _ __ _ __]") "

需要


获取完全代表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)

xsd jaxb default-value

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

EclipseLink MOXy JSON序列化

我有一个示例课程:

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

java json marshalling eclipselink moxy

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

是否有可能在Java JRE 1.6 SE中替换JAXB实现的版本?

我有这个测试课

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 jaxb

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

一个侦听套接字请求的EAR(Java EE)应用程序

我想构建一个Java EE应用程序(EAR),它不仅提供Web服务(WAR)或直接JMS请求(EJB),而且我还想接受套接字请求(例如UDP数据包).

我尝试用java.net.DatagramSocket编写一个监听器,让它作为单独的进程运行,并将请求重定向到我的EAR应用程序.

问题是..如何无缝地将这样的套接字侦听器构建到我的Java EE(EAR)应用程序中?

谢谢.

java sockets java-ee

9
推荐指数
1
解决办法
4124
查看次数

在解组对象时,JAXB不会调用setter

我正在使用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 setter jaxb customvalidator

9
推荐指数
1
解决办法
9186
查看次数

启动Java EE MVC

我正在尝试学习Java EE,从MVC架构中的Servlet和JSP开始.我知道Servlet经常被用作控制器,JSP经常被用作视图,并且这些都与模型(服务器上的后端java应用程序)交互.我问的问题是后端应用程序将包含什么.它只不过是一个使用Servlet和JSP作为接口的简单JSE应用程序吗?

另外,考虑到我在问什么可能是一个简单的问题,我可以使用一个很好的Java EE MVC教程吗?

java java-ee

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

Java:JAXB并使用char

我正在使用JAXB开发一个项目,但是我遇到了一个JAXB和char数据类型的小问题.

char gender = 'M';
Run Code Online (Sandbox Code Playgroud)

编组后转换为:

<gender>77</gender>
Run Code Online (Sandbox Code Playgroud)

所以我认为char被映射到整数,但我只想将它映射到String.我怎样才能做到这一点?它甚至可能吗?

java primitive java-metro-framework jaxb char

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

为什么使用Jersey在JSON中使用@返回名称

我正在使用作为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 json jax-rs jaxb jersey

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