Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot @具有基本数据类型的终结点-终结点没有适配器_Spring Boot_Wsdl_Cxf_Spring Ws_Wsdl2java - Fatal编程技术网

Spring boot @具有基本数据类型的终结点-终结点没有适配器

Spring boot @具有基本数据类型的终结点-终结点没有适配器,spring-boot,wsdl,cxf,spring-ws,wsdl2java,Spring Boot,Wsdl,Cxf,Spring Ws,Wsdl2java,我正试图从带有gradle(WSDL2Java)的WSDL生成cxfjava类,以便在SpringBoot应用程序中使用它 应用程序提供了一个SOAP端点。我想要的响应只包含一个简单的布尔值: 请求: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <ns:isActiveReques

我正试图从带有gradle(WSDL2Java)的WSDL生成cxfjava类,以便在SpringBoot应用程序中使用它

应用程序提供了一个SOAP端点。我想要的响应只包含一个简单的布尔值:

请求:

<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>
我用于生成的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>


默认情况下,没有基元类型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) {
...
}
@PayloadRoot(namespace=namespace\u URI,localPart=“RemoveObject”)
@回应书
public RemoveObjectResponse removeObject(@RequestPayload-JAXBElement-objectID、@RequestPayload-JAXBElement-useTrashbin、@RequestPayload-JAXBElement-ignoreReferences){
...
}
或者您可以为基本类型编写自己的扩展,但很可能不值得这么做

如果为org.springframework.xml记录器启用跟踪日志,则可以看到潜在参数解析程序的日志条目
正在测试参数解析程序是否。。。支持

<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>
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"
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "RemoveObject")
@ResponsePayload
public RemoveObjectResponse removeObject(@RequestPayload JAXBElement<Integer> objectID, @RequestPayload JAXBElement<Boolean> useTrashbin, @RequestPayload JAXBElement<Boolean> ignoreReferences) {
...
}