在 JAX-WS Web 服务方法中获取原始 XML 参数

Vla*_*kov 5 java web-services cxf jax-ws

如何实现类似的目标:

@WebService(endpointInterface = "ru.citc.techtest.cxfconcepts.HelloWorld")
public class HelloWorldImpl implements HelloWorld {

    public String sayHi(DOMSource xml) {
        return "Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要原始 XML 进行处理(SAX 或 DOM)。同时我想利用 JAX-WS 的现有方法路由。(我使用 Apache CXF)返回值可以是任何类型。

Dan*_*ulp 4

我相信这会起作用:


@WebService(wsdlLocation = "....")
@DataBinding(org.apache.cxf.databinding.source.SourceDataBinding.class)
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 
public class HelloWorldImpl implements HelloWorld {
     public Source sayHi(Source xml) {
        return xml;
    }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,您应该获得一个 StaxSource(它是 SAXSource 的子类),以便您可以将其传递到 XML 处理库等中。您可以返回 Source 的任何子类。但是,您也可以更具体并使用:


public Source sayHi(DOMSource xml) 
Run Code Online (Sandbox Code Playgroud)

如果你知道你需要它作为 DOM。我其实认为:


public Source sayHi(XMLStreamReader xml) 
Run Code Online (Sandbox Code Playgroud)

也可以。