能否请任何人解释一下以下声明的含义
@Column(nullable = false )
@XmlElement(required = true, nillable = true )
Run Code Online (Sandbox Code Playgroud)
这意味着 nullable 和 nillable 之间的区别?
在Java for XML编组/解组中,可以使用JAXB,JIBX,CASTOR,ADB等.但是这些是最通用和常用的吗?或者还有其他可用的实用程序吗?
我有一个Java应用程序,我想用XML而不是数据库保存数据.
我们决定使用JAXB而不是基于模式生成文件,我们只是在Java文件中添加了注释.
我们遇到的问题是我们有一个名为Node的抽象类的ArrayList.Node具有Module或ScreenImage的子类.当我们编组arraylist时,它不会保存类型.如:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module"
Run Code Online (Sandbox Code Playgroud)
JAXB是否支持抽象元素?
如何让JAXB保存类型,以便我可以解组它?
我有两个Java项目,都基于模式定义生成Java类,我使用xjc来创建类.
我的第二个项目依赖于第一个项目中的一个类,特别是我想在第二个项目中生成的一个类需要使用第一个项目中的一个类.
要在模式级别实现此依赖性,我使用一个简单的xsd:import方法将命名空间映射到特定模式.
JAXB在这种情况下运行得很好,除了它还在第二个项目中生成第一个项目的类型.所以跑完后有这样的事情:
Project A
+-- com.foo.bar
+-- TypeA
Project B
+-- com.foo.asdf
+-- TypeB
+-- com.foo.bar
+-- TypeA
第二个"TypeA"是不受欢迎的,我想从不首先生成它.如何指示JAXB不生成由于import语句而找到的"TypeA"类?
我正在尝试*.xsd使用xjc代码生成工具从文件包生成java源文件.
这些*.xsd文件中使用的命名空间如下:
http://www.domain.com/foo/bar.x
http://www.domain.com/foo/bar.x.y
http://www.domain.com/foo/bar.x.y.z
Run Code Online (Sandbox Code Playgroud)
XJC生成包如下:
com.domain.foo.bar.x并从"... x"和"... xy"xsd名称空间放置生成的java文件
com.domain.foo.bar.x_y并从"... xyz"xsd名称空间放置生成的java文件
我想在这里实现的是正确的:
com.domain.foo.bar.x
com.domain.foo.bar.x.y
com.domain.foo.bar.x.y.z package names
Run Code Online (Sandbox Code Playgroud)
这有点可能吗?也许使用自定义JAXB绑定?我研究过jaxb自定义绑定文档,但我不确定它是否可行.
基本上我希望xjc同时处理"/"和"." 作为包分隔符.
任何帮助赞赏.
阿德尔伯特
我有开发resteay + ejb + json的问题.使用Jboss-5.1.0.GA.我从resteasy-jaxrs得到了例子并且适合我的情况.在jboss-5.1.0.GA\server\default\lib \中添加了jar(这个问我jboss.在其他情况下捕获异常 - 类未找到)
resteasy-jaxb-provider-1.2.1.GA jaxrs-api-2.0.1.GA resteasy-jaxrs-2.0.1.GA
得到例外
09:43:15,502 ERROR [SynchronousDispatcher:error] Failed executing GET /basic
org.jboss.resteasy.plugins.providers.jaxb.JAXBMarshalException: Could not find JAXBContextFinder for media type: application/json
at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.findJAXBContext(AbstractJAXBProvider.java:50)
at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:127)
at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.writeTo(AbstractJAXBProvider.java:103)
Run Code Online (Sandbox Code Playgroud)
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>1.1.GA</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
@Stateless
public class SimpleResourceBean implements SimpleResource {
@Override
public Book getBasic() {
System.out.println("getBasic()");
return new Book("AAA", "CCC", "SSSS");
}
}
Run Code Online (Sandbox Code Playgroud)
@Path("/")
public interface SimpleResource {
@GET
@Path("basic")
// @Produces("text/plain")
@Produces("application/json")
Book getBasic();
}
Run Code Online (Sandbox Code Playgroud)
@BadgerFish
@XmlRootElement(name = …Run Code Online (Sandbox Code Playgroud) 我面对这个问题已经有一个多月了,因此,您的帮助让我感到非常满意,实际上,我在询问一种可以让我解析SOAP消息(请求)以检索所需信息的方法,例如安全信息(如果有)以及消息正文中的信息
感谢您回答我,但是知道我正在处理另一个问题,即WS-SecurityPolicy,我必须最终解析一个像这样的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic128/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Lax/>
</wsp:Policy>
</sp:Layout>
<sp:IncludeTimestamp/>
</wsp:Policy>
</sp:TransportBinding>
<sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient" />
</wsp:Policy>
</sp:SignedSupportingTokens>
Run Code Online (Sandbox Code Playgroud)
'
知道此XML文件名为Policy.xml,并且包含必须存在的WS-SecurityPolicy规则。
我在JAXB http://blog.adamsbros.org/2010/02/07/jaxb-example-code/上遵循了以下教程,并希望修改它以包含我想要作为嵌套(内部)类的类如下:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.*;
import java.io.StringReader;
import java.io.StringWriter;
public class HighlevelClass
{
@XmlRootElement(name = "employee")
@XmlAccessorType(XmlAccessType.FIELD)
public class Employee
{
@XmlAttribute
public int id;
@XmlElement
public
String firstName;
@XmlElement
public
String middleName;
@XmlElement
public
String lastName;
public Employee()
{
}
}
public static void main(String args[]) throws JAXBException
{
HighlevelClass HClass = new HighlevelClass();
Employee john = HClass.new Employee();
john.firstName = "John";
john.middleName = "Robert";
john.lastName = "Doe";
john.id = 1;
// write it out …Run Code Online (Sandbox Code Playgroud) 使用JAXB在Web服务上解组.xml时遇到问题.
这是从某个客户端发送到Web服务的.xml文件.
<?xml version="1.0" encoding="UTF-8"?>
<PERSON xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:/D:/MyWorkSpace/JAVA%20WEB%20Services%20DEVELOPER/XML%20Workspace/Persons.xsd">
<NAME>Michael</NAME>
<AGE>12</AGE>
<ADRESS>
<STREET>Somewhere in Spain</STREET>
<ZIP>47015</ZIP>
</ADRESS>
<HOBY indoorHoby="true"/>
</PERSON>
Run Code Online (Sandbox Code Playgroud)
这是解组的方法
@POST
@Path("/XMLArrivalBeacon")
@Consumes(MediaType.APPLICATION_XML)
public Response methodI(String content) {
System.out.print(content);
try {
//Unmarshaling
JAXBContext context = JAXBContext.newInstance(Person.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
//Unmarshal the String
Person person = (Person) unmarshaller.unmarshal(new StreamSource(new StringReader(content)));
//Checking that the values were recieved ok
System.out.print(person.getName());
return Response.ok("XML recieved from client!!!").build();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是使用JAXB注释注释的person类(从Schema自动生成)
package bindedschemas;
import java.math.BigInteger;
import javax.xml.bind.annotation.XmlAccessType; …Run Code Online (Sandbox Code Playgroud) 有这个方法:
public Boolean isCorrect() {
return correct;
}
Run Code Online (Sandbox Code Playgroud)
我不能写:
@XmlType(propOrder = {"id", "description", "correct"})
Run Code Online (Sandbox Code Playgroud)
因为它似乎依赖于访问者方法的命名get...可以is..改用吗?