2017-05-02 9 views
1

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을 참조하고 솔루션을 찾으려고 할 때 코드를 자동 생성하거나 코드에 추가하려고합니다. 제발 제안

답변

0

wsdl을 조작하지 않고 헤더 매개 변수를 사용하여 바인딩 클래스를 생성하는 데 사용할 수있는 옵션을 찾고있었습니다.

그리고 나는 전혀 얻지 못했습니다. 그래서 wsdl을 조작하고 헤더 태그를 작업에 추가해야했습니다. 그럼 위의 명령을 사용하여 생성하고 예상 바인딩 클래스를 만들었습니다. 참고 : soap : 헤더 노드가 여기에 추가됩니다.

<operation name="PerformContentSearch"> 
     <soap:operation soapAction="http://services.factiva.com/search/PerformContentSearch" style="document"/> 
     <input> 
      <soap:body use="literal"/> 
      <soap:header message="svc:PerformContentSearchSoapIn" part="requestHeader" use="literal"/> 
     </input> 
     <output> 
      <soap:body use="literal"/> 
     </output> 
     <fault name="fault"> 
      <soap:fault name="fault" use="literal"/> 
     </fault> 
    </operation>