- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 wsimport 创建了一个肥皂客户端,我需要将消息中字符串字段内的 xml 数据发送到网络服务器。我知道我实际上并不需要在 Web 服务调用中使用 cdata,但 Web 服务需要此字段位于 cdata 标记中。
问题是如何做到这一点。
为了从 wsdl 生成代码,我使用 jaxws-maven-plugin。在 Maven 配置中我使用绑定(bind)文件
bindingFiles
binding Filebinding.xjb /bindingFile
/bindingFiles
jxb:bindings version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="urn:uniface:applic:services:BRF_IN"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<jxb:globalBindings generateElementProperty="false"/>
<jxb:bindings scd="//element::tns:DATA">
<jxb:javaType
name="String"
parseMethod="de.xyz.CdataConverter.unmarshal"
printMethod="de.xyz.CdataConverter.marshal"
/>
</jxb:bindings>
marshal/unmarschal 看起来像这样:
public class CdataConverter {
private static final Pattern PATTERN = Pattern.compile("((?<=\\<\\!\\[CDATA\\[)[\\S\\s]+(?=\\]\\]\\>))");
private static final String CDATA_START = "<![CDATA[";
private static final String CDATA_END = "]]>";
private final static Logger logger =
Logger.getLogger(LgTestServer.class.getName());
public static String marshal(String input) {
if (input == null) {
return null;
}
PropertyConfigurator.configure(".\\log4j.properties");
logger.info("input --------------------->>>>>>>>\n" + input);
return CDATA_START + input + CDATA_END;
}
public static String unmarshal(String cdatainput) {
if (cdatainput == null) {
return null;
}
Matcher matcher = PATTERN.matcher(cdatainput);
if (matcher.find()) {
return matcher.group();
}
return cdatainput.trim();
}
这样我在数据字段中得到一个 ![CDATA[ 但 xml 是这样编码的
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
现在我在这里找到了这个(如何使用 jaxb 进行 cdata): http://odedpeer.blogspot.de/2010/07/jaxb-sun-and-how-to-marshal-cdata.html
但我不明白如何使用 Maven 插件和 wsimport 来做到这一点。我的意思是,我无法对其进行编码,它必须以任何方式进行配置。
你有什么想法如何做到这一点吗?
最佳答案
注释 @XmlCDATA
( read more ) 可以由 JAXB Annotate Plugin 自动生成。我使用的绑定(bind)如下。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
jaxb:version="2.1"
xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="annox">
<!--Choose one-->
<!--wsimport--><jaxb:bindings schemaLocation="service.wsdl#types?schema1" node="/xs:schema">
<!--wsdl2java--><jaxb:bindings schemaLocation="service.wsdl#types1" node="/xs:schema">
<jaxb:bindings node="//xs:complexType[@name='RegisterPaymentRequest']/xs:sequence/xs:element[@name='returnURL']">
<annox:annotate target="field">
<annox:annotate annox:class="org.eclipse.persistence.oxm.annotations.XmlCDATA"/>
</annox:annotate>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
jaxws-maven-plugin (wsimport) 定义:
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>generate-sources-service</id>
<phase>generate-sources</phase>
<configuration>
<sourceDestDir>${project.basedir}/src/main/java</sourceDestDir>
<bindingDirectory>${project.basedir}/src/main/resources</bindingDirectory>
<bindingFiles>
<bindingFile>binding.xjb</bindingFile>
</bindingFiles>
<wsdlDirectory>${project.basedir}/src/main/resources</wsdlDirectory>
<wsdlFiles>
<wsdlFile>service.wsdl</wsdlFile>
</wsdlFiles>
<xjcArgs>
<xjcArg>-Xannotate</xjcArg>
</xjcArgs>
</configuration>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.4</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
</plugin>
cxf-codegen-plugin (wsdl2java) 定义:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.5.5</version>
<executions>
<execution>
<id>generate-sources-service</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.basedir}/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>
${project.basedir}/src/main/resources/service.wsdl
</wsdl>
<extraargs>
<extraarg>-xjc-Xannotate</extraarg>
<extraarg>-b</extraarg>
<extraarg>
${project.basedir}/src/main/resources/binding.xjb
</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>annotate</artifactId>
<version>0.4.1.5</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
</plugin>
关于jax-ws - jax-ws/wsimport 中的 cdata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893531/
Apache CXF 可以完成任务。但我想在没有任何 spring 依赖的情况下组合它。提前谢谢你! 最佳答案 JAX-WS 和 JAX-RS 都是 Java EE 6 的一部分.因此,您可以在不使用
Apache CXF 可以完成任务。但我想在没有任何 spring 依赖的情况下组合它。提前谢谢你! 最佳答案 JAX-WS 和 JAX-RS 都是 Java EE 6 的一部分.因此,您可以在不使用
所以我的意思是你有一个分类特征 $X$(假设你已经把它变成了整数)并说你想使用特征 $A$ 将它嵌入到某个维度中,其中 $A$ 是 arity x n_embed . 通常的做法是什么?使用 for
所以我的意思是你有一个分类特征 $X$(假设你已经把它变成了整数)并说你想使用特征 $A$ 将它嵌入到某个维度中,其中 $A$ 是 arity x n_embed . 通常的做法是什么?使用 for
我知道网上有很多文档主要描述技术差异。 但是我很想知道您更喜欢一种特定类型而不是其他类型的常见用例是什么? 这些偏好是因为集成模式/产品支持特定类型吗? 最佳答案 谢谢你的回答。然而实际用例差异以及何
我想将 CXF 与 Google Guice 集成。我已经在我的项目中使用 Guice,并且我想避免添加额外的依赖项。 CXF 是我的选择,因为要求之一是能够向服务用户提供 XML、JSON、JSON
来自 JSR-339: For simplicity, JAX-RS implementations are NOT REQUIRED to support processing groups oth
我开始使用 JAX WS 研究 Java Web 服务。我正在阅读的书的第一章展示了如何仅使用 java SE 构建和部署简单的 jax ws web 服务。特别是,Web 服务是通过 Endpoin
在 JAX 的快速入门教程中,我发现可以使用以下代码行为可微函数 fun 高效地计算 Hessian 矩阵: from jax import jacfwd, jacrev def hessian(fu
JAX-RS 提供了 StreamingOutput 接口(interface),我们可以实现它来对我们的响应主体进行原始流处理。 public interface StreamingOutput {
有没有办法获得java.lang.reflect.Method为给定的 @Path 调用的方法(用 HttpServletRequest 注释) ? 这是我的用例:我在 Java EE 中 Filte
我接到了一家公司的任务,该任务向我发送了一台已完成所有设置的虚拟机。任务是我必须创建一个 API 来从数据库中检索人员详细信息并显示它。 问题是,当我运行应用程序时,服务器返回一个包含 hello w
我有一个 POST 方法调用,它接受很少的表单参数。我希望 JAX-RS 能够处理不存在特定表单参数的情况。 示例: @POST @Produces (MediaType.APPLICATION_JS
我有 JAX-RS 网络应用程序,我想记录从获取请求到响应的时间量。在带有 servlet 过滤器的 Spring Boot 中很容易。但是我的应用程序中的过滤器无法正常工作: @Provider p
使用以下网址。 http://doma.in/context/resource/some/.../undefined 我想获取 ../resource 之后的路径名,即 /some/.../undef
我编写了 2 个 Web 服务,一个使用 Jax-WS,一个使用 Jax-RPC。他们只是返回一个字符串。 我使用 jMeter 进行了压力测试,奇怪的是,Jax-RPC 速度更快。 我什么时候才能在
我花了几个小时在嵌入式 Jetty 9.1.0.v20131115 和 RESTEasy 3.0.5.Final 中安装自定义登录服务。我的登录服务将在数据库中查找用户并为他们分配角色。它看起来像这样
有没有办法操纵jaxws中使用的编码器。 我喜欢发送一个在网络服务请求中提交的 cdata,为此我想在这里尝试类似描述的东西:http://odedpeer.blogspot.de/2010/07/j
我想从 java 服务器 (Restful Jax-rs) 发送图像。我的客户是安卓。 @GET public Response getUserImage() { byte[] image =new
我对网络服务很陌生。我找不到 JAX-WS 和 CXF 之间的区别。 据我了解,JAX-WS是java提供的规范,CXF是实现。 如果我错了,请纠正我。 最佳答案 是的,你是对的。 JAX-WS 是基
我是一名优秀的程序员,十分优秀!