2017-03-10 2 views
0

Java에서 JAX-WS 웹 메서드를 사용하려고합니다. 그리고 몇 가지 디자인 문제가 발생합니다. 웹 서비스 메서드에서 생성 된 XML 구조를 변경하려고합니다. 아래에는 일부 코드 부분이 나와 있습니다. 나는 내가 원하는 것을 물을 수 있기를 바란다.JAX-WS 웹 메서드 추가 태그 방지 방법

아래와 같이 테스트 Java 클래스를 만듭니다.

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
"testKod" 
}) 
@XmlRootElement(name = "testService") 
public class TestService { 

    @XmlElement(required = true) 
    protected String testKod; 
    @XmlAttribute(required = true) 
    protected String uyeKod; 
    @XmlAttribute(required = true) 
    protected String islemRefNo; 
... 
} 

그리고 웹 서비스와 메소드를 구현합니다.

@WebMethod(operationName = "testService") 
@WebResult(name="testServiceResponse") 
public TestServiceResponse testService(@WebParam(name = "params") TestService params){ 

    TestServiceResponse response = new TestServiceResponse(); 
    try { 
     response.setUyeKod(params.getUyeKod()); 
     response.setIslemRefNo(params.getIslemRefNo()); 
     response.setTestKod(params.getTestKod()); 
    } catch (Exception e) { 
     response.getHata().setAciklama(Convert.fromDBtoTR(TExceptionUtil.getExceptionMessage(e))); 
     response.getHata().setHataKodu("100"); 

    } 
    return response; 
} 

SAOP-UI로 테스트하고 xsd를 엑스포트하면 클라이언트 요청이 아래에 표시됩니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.ddd.ccc.bbb.aaa.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ws:testService> 
     <params islemRefNo="1212" uyeKod="XXX" > 
      <testKod>1212</testKod> 
     </params> 
     </ws:testService> 
    </soapenv:Body> 
</soapenv:Envelope> 

하지만 PARAMS 태그를보고 싶지 않다, 나는 간단히

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.ddd.ccc.bbb.aaa.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ws:testService islemRefNo="1212" uyeKod="XXX" > 
      <testKod>1212</testKod> 
     </ws:testService> 
    </soapenv:Body> 
</soapenv:Envelope> 

아래에있는 내 XSD 아래와 같은처럼보고 싶어;

<xs:complexType name="testService"> 
    <xs:sequence> 
    <xs:element name="params" minOccurs="0"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="testKod" type="xs:string"/> 
     </xs:sequence> 
     <xs:attribute name="uyeKod" type="xs:string" use="required"/> 
     <xs:attribute name="islemRefNo" type="xs:string" use="required"/> 
    </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
</xs:complexType> 

하지만 그 모양을하고 싶습니다. 또한 나는 응답 XML에서 동일한 문제에 직면했다.

<xs:element name="testService"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="testKod" type="xs:string"/> 
     </xs:sequence> 
     <xs:attribute name="uyeKod" type="xs:string" use="required"/> 
     <xs:attribute name="islemRefNo" type="xs:string" use="required"/> 
    </xs:complexType> 
</xs:element> 

답변

1

어떤 종류의 스타일 바인딩 (RPC 또는 문서)을 사용하는지에 따라 다릅니다. 다음과 같은 주석을 지정할 수 있습니다

@SOAPBinding(
    style=Style.RPC, 
    use=Use.LITERAL, 
    parameterStyle=ParameterStyle.BARE 
) 

나는 당신을위한 최고의 구성 RPC/리터럴 생각합니다.

모든 가이드 간의 차이점을 확인하려면 https://www.ibm.com/developerworks/library/ws-whichwsdl/ 가이드를 확인하십시오.