wsdl 및 해당 xsds가 하나의 폴더에 있습니다. 그리고 나는 클라이언트와 바인딩 클래스를 생성 해보십시오. 하지만 생성 된 스텁 매개 변수로 헤더 바인딩 클래스를 볼 수 없습니다. xadditionalHeaders가 wavenport의 wsimport 목표에서 작동하지 않습니다.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>generate-reports-ws-code</id>
<phase>generate-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<vmArgs>
<vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
</vmArgs>
<bindingDirectory>${basedir}</bindingDirectory>
<bindingFiles>
<bindingFile>binding.xml</bindingFile>
</bindingFiles>
<packageName>${xsd.binding.generated.search.package.name}</packageName>
<wsdlFiles>
<wsdlFile>${basedir}/src/main/resources/xsd/Search.wsdl</wsdlFile>
</wsdlFiles>
<xadditionalHeaders>true</xadditionalHeaders>
<verbose>true</verbose>
<outputDirectory>${xsd.binding.generated.directory}</outputDirectory>
</configuration>
</execution>
</executions>
는 그 다음 모든 클래스를 바인딩하고 다음과 같은 클라이언트를 생성합니다.
public interface SearchSoap {
//..
@WebMethod(operationName = "PerformContentSearch", action = "http://services.my.url./search/PerformContentSearch")
@WebResult(name = "PerformContentSearchResponse", targetNamespace = "http://types.my.url./search", partName = "parameters")
public PerformContentSearchResponse performContentSearch(
@WebParam(name = "PerformContentSearch", targetNamespace = "http://types.my.url./search", partName = "parameters")
PerformContentSearch parameters)
throws SearchExceptionSoapOut
;
}
하지만 난 '= 사실 헤더'및이 방법의 다른 매개 변수 (에 RequestHeader) 기다리고 있었다이
@WebResult(name = "PerformContentSearchResponse", targetNamespace = "http://types.my.url./search", partName = "parameters")
@WebMethod(operationName = "PerformContentSearch", action = "http://services.my.url./search/PerformContentSearch")
public PerformContentSearchResponse performContentSearch(
@WebParam(partName = "parameters", name = "PerformContentSearch", targetNamespace = "http://types.my.url./search")
PerformContentSearch parameters,
@WebParam(partName = "requestHeader", name = "requestHeader", targetNamespace = "http://types.my.url./header", header = true)
RequestHeader requestHeader
) throws SearchExceptionSoapOut;
같은 것을 기대하고 있었다. 이러한 모든 개체는 성공적으로 만들어졌지만 xadditionalHeaders를 true로 설정해도 머리글이있는 메서드를 자동 생성 할 수 있기를 바랍니다. 그리고 wsdl2java 목표 및 -exsh arg와 함께 cxf-codegen-plugin을 사용해 보았습니다.
<configuration>
<sourceRoot>${xsd.binding.generated.directory}</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/xsd/Search.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-exsh</extraarg>
<extraarg>true</extraarg>
<!-- <extraarg>-impl</extraarg> -->
<extraarg>-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
<defaultOptions>
<noAddressBinding>true</noAddressBinding>
<bindingFiles>
<bindingFile>binding.xml</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
</defaultOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
그리고 내 WSDL 조작이 난 그냥 WSDL에 포함되어 header.xsd이
<portType name="SearchSoap">
<operation name="PerformContentSearch">
<input message="svc:PerformContentSearchSoapIn"/>
<output message="svc:PerformContentSearchSoapOut"/>
<fault name="fault" message="svc:SearchExceptionSoapOut"/>
</operation>
</portType>
이하와 같다. 실제로 wsdl에 포함 된 header.xsd가 있는데 작업에 언급되어 있지 않으므로 here을 참조하고 솔루션을 찾으려고 할 때 코드를 자동 생성하거나 코드에 추가하려고합니다. 제발 제안