- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 gradle (WSDL2Java) 从 WSDL 生成 CXF-Java-Classes,以便我可以在我的 SpringBoot-Application 中使用它。
应用程序提供了一个 SOAP 端点。我想要的响应仅包含一个简单的 bool 值:
要求:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<ns:isActiveRequest xmlns:ns=\"http://problem.com\"><id>1234</id></ns:isActiveRequest>
</soap:Body>
</soap:Envelope>
响应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<ns:isActiveResponse xmlns:ns="http://problem.com">true</ns3:isActiveResponse>
</soap:Body>
</soap:Envelope>
我无法在我的 WSDL 中定义此响应,因此它在我的 SpringBoot 应用程序中使用 @Endpoint-Annotation 生成 CXF 后可以正常工作。我总是收到错误消息:“没有端点适配器...您的端点是否使用 @Endpoint 注释,或者它是否实现了支持的接口(interface),如 MessageHandler 或 PayloadEndpoint?”
通常我对具有复杂响应类型的 CXF 和 Endpoint 没有问题,因为它会生成一个 @XmlRootElement。但它不会在响应中使用原始类型来执行此操作,并且无法在 @Endpoint-Annotation 下识别我的方法。
[...]
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
@Endpoint
public class SoapEndpoint implements Problem {
private static final String TARGET_NAMESPACE = "http://problem.com";
@PayloadRoot(namespace = TARGET_NAMESPACE, localPart = "isActiveRequest")
@ResponsePayload
@Secured(Roles.PERMISSION)
public boolean isActive(@RequestPayload IsActiveRequest request) {
return true;
}
我用于生成的 WSDL 如下所示:
<wsdl:types>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="unqualified" targetNamespace="http://problem.com"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="isActiveRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="id" maxOccurs="1" minOccurs="1"
nillable="false" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="isActiveResponse" type="xs:boolean"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="isActiveRequest">
<wsdl:part name="parameters" element="tns:isActiveRequest"></wsdl:part>
</wsdl:message>
<wsdl:message name="isActiveResponse">
<wsdl:part name="parameters" element="tns:isActiveResponse"></wsdl:part>
</wsdl:message>
<wsdl:portType name="problem">
<wsdl:operation name="isActive">
<wsdl:input message="tns:isActiveRequest" name="isActiveRequest"/>
<wsdl:output message="tns:isActiveResponse" name="isActiveResponse"/>
<wsdl:fault message="tns:myException" name="fault"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="problem_SOAPBinding" type="tns:problem">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="isActive">
<soap:operation soapAction="isActive"/>
<wsdl:input name="isActiveRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="isActiveResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="fault">
<soap:fault use="literal" name="fault"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
在我的 build.gradle 中,我使用的是 CXF 3.2.1
task wsdl2java(type: JavaExec) {
ext {
outputDir = file(cxfOutputDir)
wsdlFiles = new FileNameByRegexFinder().getFileNames("${wsdlDir}", /.*\.wsdl/)
}
wsdlFiles.each { String wsdlFile ->
outputs.upToDateWhen { false }
outputs.dir outputDir
main = 'org.apache.cxf.tools.wsdlto.WSDLToJava'
classpath = configurations.cxfTool
args '-d', outputDir
args '-wsdlLocation', "/wsdl/" + new File(wsdlFile).name
args '-verbose'
args '-validate'
args wsdlFile
}
}
compile group: 'org.apache.cxf', name: 'cxf-core', version: "3.2.1"
compile group: 'org.apache.cxf', name: 'cxf-rt-frontend-jaxws', version: "3.2.1"
compile "org.apache.cxf:cxf-spring-boot-starter-jaxws:3.2.1"
cxfTool "org.apache.cxf:cxf-tools-wsdlto-frontend-jaxws:3.2.1"
cxfTool "org.apache.cxf:cxf-tools-wsdlto-databinding-jaxb:3.2.1"
cxfTool "org.apache.cxf:cxf-tools-common:3.2.1"
cxfTool "org.apache.cxf:cxf-tools-wsdlto-core:3.2.1"
最佳答案
默认没有原始类型 MethodArgumentResolver。如引用资料所示,您可以使用 10 多个不同的解析器。我最终得到了 JAXB:
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "RemoveObject")
@ResponsePayload
public RemoveObjectResponse removeObject(@RequestPayload JAXBElement<Integer> objectID, @RequestPayload JAXBElement<Boolean> useTrashbin, @RequestPayload JAXBElement<Boolean> ignoreReferences) {
...
}
或者您可以为原始类型编写自己的扩展,但很可能不值得这样做。
https://docs.spring.io/spring-ws/site/reference/html/server.html#d5e1086
如果您为 org.springframework.xml 记录器启用跟踪日志,那么您可以看到潜在参数解析器的日志条目 Testing if argument resolver ... supports <your parameter>
关于spring-boot - 具有原始数据类型的@Endpoint - 端点没有适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796784/
有人可以解释一下 spring-boot-parent 和 spring-boot-starter-parent 之间的区别吗,正如我在下面附加的 GIT HUB 代码链接之一中看到的,他们为 spr
我有与 jersey 框架集成的 Spring Boot 应用程序。 现在,当我尝试运行该应用程序时,它只是停留在 Spring 启动徽标上,之后没有任何 react 。 我也尝试添加 -X ,但徽标
我指的是 Spring Boot 关于 的文档自动配置 和 执行器 模块: 自动配置: Spring Boot AutoConfiguration attempts to automatically
我正在尝试将 apache log4j 集成到我的 Spring boot 应用程序中。这是我的 build.gradle 文件: build.gradle buildscript { rep
使用 Spring Boot Maven 插件的以下命令在生产中启动 Spring Boot 应用程序是否是一个好主意或实践? mvn spring-boot:run 最佳答案 不,这是个坏主意。 您
据我所知,spring boot 和 spring session 为我们提供了一站式自动配置,但是当我的应用程序使用 session redis 和应用程序缓存 redis 时,不是同一个 redi
我希望使用Spring Boot创建一个新的Web应用程序。不幸的是,我的服务器在技术堆栈方面相当有限。它安装了Java 5。 谁能告诉我spring boot是否可以在Java 1.5上运行以及什么
我有3个实体 CarWash(设置Wash) Wash(car_wash_id FK到CarWash) WashComment(wash_id FK到Wash) 有什么办法可以写这个查询 @Qu
我一直在关注this文章。 我正在尝试在Spring-boot应用程序中优雅地处理gRPC错误,的主要目标是能够在gRPC客户端中获取错误状态。 在上面的文章之后,我坚持为异常添加拦截器。如何在Spr
我有一个要使用的自定义log4j布局插件。在IntelliJ中运行或与./gradlew bootRun一起运行时,插件可以正常工作。不使用./gradlew bootJar构建启动jar。 启用-D
我想在给定范围 (5001-5100) 的随机端口上启动 Spring Cloud 应用程序(Spring Boot 1.5.14,Spring Cloud Edgware.SR4)。我知道我们可以使
任何人都可以向我展示或指出不使用 spring boot gradle 插件的 spring boot gradle 项目。 我正在寻找类似不使用 gradle 插件的 spring boot sta
我当时尝试包含上述依赖项之一,但找不到任何区别: spring boot starter web:我可以看到 Flux 和 Mono 类并制作一个响应式(Reactive)休息 Controller
我们一直在为我们的应用程序使用 Springboot 1.X。 现在准备开始一些新的应用程序,想知道我们是应该使用 SpringBoot2.0 还是坚持使用 SpringBoot 1.X? 对一种方式
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
当我在 pom.xml 中添加简单的 spring-boot-starter-data-jpa 依赖项时,在 pom.xml 文件中出现错误。如果我删除该依赖项,则不会再有错误。我不确定为什么会发生这
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
我在网上看了很多关于 spring-boot-devtools 的文章和问题,但仍然无法弄清楚为什么它对我不起作用。每次运行我的应用程序时,我都会得到以下信息: 17:54:28.057 [main]
我正在尝试将现有的 Spring 应用程序移植到 Spring Boot。我不使用 spring-boot-starter-data-solr 启动器,但是我的类路径上有 apache solrj (
(这主要是一个历史问题。Pivotal 建议所有论坛讨论都在 StackOverflow 上进行,这就是我在这里问它的原因。) Spring Boot 项目用来证明将应用程序的类和依赖项从可执行 ja
我是一名优秀的程序员,十分优秀!