使用spring,使用以下代码:
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
for(HttpMessageConverter httpMessageConverter : messageConverters){
System.out.println(httpMessageConverter);
}
ResponseEntity<ProductList> productList = restTemplate.getForEntity(productDataUrl,ProductList.class);
Run Code Online (Sandbox Code Playgroud)
我明白了
org.springframework.http.converter.ByteArrayHttpMessageConverter@34649ee4
org.springframework.http.converter.StringHttpMessageConverter@39fba59b
org.springframework.http.converter.ResourceHttpMessageConverter@383580da
org.springframework.http.converter.xml.SourceHttpMessageConverter@409e850a
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@673074aa
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@1e3b79d3
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@52bb1b26
org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.mycopmany.ProductList] and content type [text/html;charset=UTF-8]
Run Code Online (Sandbox Code Playgroud)
pojo的片段:
@XmlRootElement(name="TheProductList")
public class ProductList {
@XmlElement(required = true, name = "date")
private LocalDate importDate;
Run Code Online (Sandbox Code Playgroud) 我需要针对我的模式验证Class对象,在该模式中我提供了正则表达式来验证自动生成的JAXB类的字段.当我尝试验证我的类对象时,我得到以下错误:
无法编组类型"xyz"作为元素,因为它缺少@XmlRootElement注释
这是我用来验证自动生成的类对象的代码:
jc = JAXBContext.newInstance(obj.getClass());
source = new JAXBSource(jc, obj);
Schema schema = schemaInjector.getSchema();
Validator validator = schema.newValidator();
validator.validate(source);
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以解决这个问题吗?
我有2个班:
@XmlRootElement
public class A {
private Long id;
private B b;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
和
@XmlRootElement
public class B {
private Long id;
private String field1;
private String field2;
// setters and getters
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,如果我改变类的实例A到XML,我将所有的字段(id)和引用B类字段(id,field1,field2)是这样的:
<a>
<id>2</id>
<b>
<id>5</id>
<field1>test1</field1>
<field2>test3</field2>
</b>
</a>
Run Code Online (Sandbox Code Playgroud)
是否可以修改引用类中的哪些字段B包含在类的XML中A?例如,我想说当我转换一个A类的实例时,我只想id从B类(no field1和field2fields)中获取,所以我想得到:
<a>
<id>2</id>
<b>
<id>5</id>
</b> …Run Code Online (Sandbox Code Playgroud) 最近,我们对我们的代码进行了安全审核,其中一个问题是我们的应用程序受Xml外部实体(XXE)攻击.
基本上,应用程序是一个通过Web服务以XML形式接收输入的计算器.
以下是对我们的应用程序进行此类XXE攻击的示例:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<foo:calculateStuff>
<!--Optional:-->
<xmlInput><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE currency [
<!ENTITY include SYSTEM "file:///d:/" >]>
<calcinput>...</calcinput>
]]></xmlInput>
</foo:calculateStuff>
</soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)
如您所见,我们可以引用指向外部文件("file:///d:/")的实体.
关于XML输入本身(该<calcinput>...</calcinput>部分)是使用JAXB(v2.1)解组的.Web服务部分基于jaxws-rt(2.1).
我需要做些什么来保护我的网络服务?
从历史上看,我总是在我的Maven项目中使用以下JAXB RI工件:
com.sun.xml.bind:jaxb-impl - 运行com.sun.xml.bind:jaxb-xjc - 模式编译器com.sun.xml.bind:jaxb-jxc - 模式生成器从大约版本开始,2.2.10*这些工件现在被描述为"旧":
com.sun.xml.bind:jaxb-impl旧的JAXB运行时模块.
所以看起来这些工件现在已经过时了.
问题是:
应该使用哪些工件?
我有以下XML,没有XSD或模式,我想使用JAXB解析为java对象,因为我听说它比SAX更好.有没有办法用注释或更好的方法来实现这一点?它是否使我只需要一个FosterHome类?我很难找到如何做到这一点任何帮助都很感激.
我最初想的是有一个FosterHome,Family和Child课程.使用JAXB,不再需要3个类?我不知道如何解决这个问题,因为ChildID出现在两个不同的领域.
<?xml version="1.0" encoding="UTF-8"?>
<FosterHome>
<Orphanage>Happy Days Daycare</Orphanage>
<Location>Apple Street</Location>
<Families>
<Family>
<ParentID>Adams</ParentID>
<ChildList>
<ChildID>Child1</ChildID>
<ChildID>Child2</ChildID>
</ChildList>
</Family>
<Family>
<ParentID>Adams</ParentID>
<ChildList>
<ChildID>Child3</ChildID>
<ChildID>Child4</ChildID>
</ChildList>
</Family>
</Families>
<RemainingChildList>
<ChildID>Child5</ChildID>
<ChildID>Child6</ChildID>
</RemainingChildList>
</FosterHome>
Run Code Online (Sandbox Code Playgroud) JAXBContext context = JAXBContext
.newInstance(CreateExemptionCertificate.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(cc, System.out);
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我将结果发送到控制台(我的意思是XML正在控制台上打印).我想把这个XML变成一个字符串.我没有得到我应该传递给marshal方法的哪个参数来获取String变量中的XML String而不是在控制台上打印它.任何有任何想法的人请分享.
用@XMLRootElement和注释一个类有什么区别@XMLType.我一直在注释类@XMLType的结构将在XML模式中多次使用,@XMLRootElement何时只使用一次 - 这是最好的方法吗?
一个不同但相关的问题,我将在这里包括.该@XMLType标注有一个propOrder属性来指定其中责令其元素出现-是有一个相当于为@XMLRootElement?
我正在使用这些注释与JAX-WS注释一起创建Web服务,如果这有任何区别的话.
当我调用使用CXF构建的特定的restful服务方法时,我收到以下错误,有人知道为什么以及如何解决它?
发生JAXBException:类com.octory.ws.dto.ProfileDto也不是它的任何超类都知道这个上下文...
以下是服务方法和相关的DTO:
public class Service {
public Response results() {
Collection<ProfileDto> profilesDto = new ArrayList<ProfileDto>();
...
SearchResultDto srd = new SearchResultDto();
srd.setResultEntities(profilesDto); // Setting profilesDto collection as resultEntities
srd.setResultSize(resultSize);
return Response.ok(srd).build();
}
}
Run Code Online (Sandbox Code Playgroud)
SearchResultDto:
@XmlRootElement(name="searchResult")
public class SearchResultDto {
private Collection resultEntities;
private int resultSize;
public SearchResultDto() { }
@XmlElementWrapper(name="resultEntities")
public Collection getResultEntities() {
return resultEntities;
}
public void setResultEntities(Collection resultEntities) {
this.resultEntities = resultEntities;
}
public int getResultSize() {
return resultSize;
}
public void …Run Code Online (Sandbox Code Playgroud) 我正在JBoss 5和Java 1.6下开发Web服务.什么可能导致这个例外?下面是我简化的Web服务代码.
@Stateless
@WebService()
public class AccountWS {
@WebMethod()
public CreateAccountResponse createAccount(@WebParam(name = "request") CreateAccountRequest request) {
return null;
}
Run Code Online (Sandbox Code Playgroud)
以下是完整的堆栈跟踪.
16:19:03,421 ERROR [AbstractKernelController] Error installing to Real: name=vfsfile:/C:/Apps/jbdevstudio/jboss-eap/jboss-as/server/default/deploy/sif_esb.esb/ state=PreReal mode=Manual requiredState=Real
org.jboss.deployers.spi.DeploymentException: Error during deploy: vfsfile:/C:/Apps/jbdevstudio/jboss-eap/jboss-as/server/default/deploy/sif_esb.esb/
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:177)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1440)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1158)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1099)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:782)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935) …Run Code Online (Sandbox Code Playgroud)