웹 서비스 게이트웨이 문제점 해결 팁
이 특정 팁 세트를 사용하여 웹 서비스 게이트웨이 사용 시 발생한 문제점을 해결할 수 있습니다.
웹 서비스 게이트웨이 관련 문제를 식별하고 해결할 수 있도록
컴포넌트 추적(CTRACE) 설정에서 설명한 대로 WebSphere Application Server 추적 및 로깅 기능을 사용하십시오.
게이트웨이에 대한 추적을 사용하려면, 애플리케이션 서버 추적 문자열을 com.ibm.ws.sib.webservices.*=all=enabled:com.ibm.ws.wsgw.*=all=enabled로 설정하십시오. 게이트웨이와 관련이 있다고 판단되는 문제점이 발생하는 경우, WebSphere Application Server 관리 콘솔 및 애플리케이션 서버의 SystemOut.log 파일에서 오류 메시지를 점검할 수 있습니다. 또한 애플리케이션 서버 디버그 추적을 사용 가능화하여 상세한 실행 덤프를 제공할 수도 있습니다.
웹 서비스 게이트웨이는 서비스 통합 버스 사용 웹 서비스의 맨 위에 있는 관리 계층으로 구현됩니다. 그러므로 게이트웨이 사용 시 경험할 수 있는 대부분의 알려진 문제가 실제로 버스 사용 가능 웹 서비스 관련 문제이며 버스 사용 웹 서비스 문제점 해결 팁에 문서화됩니다.
WebSphere Application Server 시스템 메시지는 애플리케이션 서버 컴포넌트 및 애플리케이션을 포함한 다양한 소스에서 로그됩니다. 애플리케이션 서버 컴포넌트로 로그되고, IBM 제품과 연관된 메시지는 메시지를 발행한 컴포넌트 및 애플리케이션을 표시하는 고유한 메시지 ID로 시작됩니다. 웹 서비스 게이트웨이 컴포넌트의 접두부는 CWWSG이며 버스 사용 웹 서비스 컴포넌트의 접두부는 CWSWS입니다.
문제점 해결 참조: 메시지 주제에는 메시지 접두부에 색인화된 게이트웨이 및 버스 사용 웹 서비스 메시지에 대한 정보가 포함되어 있습니다. 각 메시지에 대해 문제점의 설명과 문제점을 해결하기 위해 취할 수 있는 모든 조치의 세부사항이 있습니다.
- 메시지를 버스 대상으로 직접 전달하면 기본 RPC-인코드 웹 서비스 문자열 배열 메시지가 일부 대상 서비스 제공자와 상호 운용되지 않습니다.
- JMS를 통한 SOAP 웹 서비스 메시지는 JmsTextMessage가 아닌 JmsBytesMessage로 웹 서비스 게이트웨이에서 전송됩니다.
- 게이트웨이 서비스를 작성하면, 웹 브라우저를 통해 게이트웨이 서비스 WSDL 파일에 액세스하려고 시도할 때까지 해당 WSDL 설명이 SDO 저장소에 작성되지 않음
- WebSphere Application Server 버전 5.1에서 이후 버전으로 게이트웨이 마이그레이션
- 게이트웨이 서비스가 아닌 대상 서비스에 대해 WSDL에서 웹 서비스 클라이언트 생성
- 필터를 포함한 게이트웨이를 WebSphere Application Server 버전 5.1에서 이후 버전으로 마이그레이션하면 필터가 더 이상 동작하지 않음
- 필터를 포함한 게이트웨이를 WebSphere Application Server 버전 5.1에서 버전 7.0 이상으로 마이그레이션하면 StorageQueue로 끝나는 이름의 대상이 작성됨
- 클라이언트 애플리케이션이 WebSphere Application Server 버전 5.1에서 작동하지만 이후 버전에서는 잘못 형성된 요청이나 응답으로 문제가 발생함
- WebSphere Application Server 버전 5.1에서 실행 중인 JAX-RPC 클라이언트는 JMS에서의 SOAP를 사용하여 Application Server 버전 5.1에서 실행 중인 웹 서비스를 호출합니다.
- 관리 콘솔의 게이트웨이 패널은 WebSphere Application Server Network Deployment에서만 사용 가능함
메시지를 버스 대상으로 직접 전달하면 기본 RPC-인코드 웹 서비스 문자열 배열 메시지가 일부 대상 서비스 제공자와 상호 운용되지 않습니다.
- 생성된 기본 RPC-인코드 웹 서비스 문자열 배열 메시지는 일부 대상 서비스 제공자와 상호 운용되지 않습니다.
- 생성된 문자열 배열 메시지는 상호 운용될 수 있는 동등한 표준 JAX-RPC와 정확하게 동일하지 않습니다.
- 서비스 통합 버스 메시지:
<partname env:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/ xsi:type='ns1:ArrayOf_xsd_string'> <item xsi:type='xsd:anySimpleType'>namevalue</item> </partname>
- JAX-RPC 클라이언트 메시지:
<partname xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[1]"> <item>namevalue</item> </partname>
- 관리 콘솔을 시작하십시오.
- 로 이동한 다음 새로 작성을 클릭하십시오.
- 다음 JVM 사용자 정의 특성을 작성하십시오. 표시된 값은 대소문자를 구분합니다.
- 이름: com.ibm.websphere.sib.webservices.useTypeSoapArray
- 값: true
- 애플리케이션 서버를 다시 시작하십시오.
JMS를 통한 SOAP 웹 서비스 메시지는 JmsTextMessage가 아닌 JmsBytesMessage로 웹 서비스 게이트웨이에서 전송됩니다.
WebSphere Application Server 버전 6 이상의 경우 기본적으로 웹 서비스 게이트웨이에서 전송된 JMS를 통한 SOAP 웹 서비스 메시지가 JmsBytesMessage로서 보내지는 반면, WebSphere Application Server 버전 5.1의 경우 웹 서비스 게이트웨이가 JmsTextMessage를 전송합니다.
- 관리 콘솔을 시작하십시오.
- 로 이동한 다음 새로 작성을 클릭하십시오.
- 다음 JVM 사용자 정의 특성을 작성하십시오. 표시된 값은 대소문자를 구분합니다.
- 이름: com.ibm.ws.sib.webservices.useSOAPJMSTextMessages
- 값: true
- 애플리케이션 서버를 다시 시작하십시오.
게이트웨이 서비스를 작성하면, 웹 브라우저를 통해 게이트웨이 서비스 WSDL 파일에 액세스하려고 시도할 때까지 해당 WSDL 설명이 SDO 저장소에 작성되지 않음
모든 게이트웨이 서비스에는 연관된 인바운드 서비스가 있습니다. 게이트웨이 서비스 WSDL 파일은 이 인바운드 서비스와 연관되며 메시지가 인바운드 서비스에서 가져오는 경우에만 필요합니다. 그러므로, 처음으로 인바운드 서비스 또는 웹 브라우저를 통해 호출되면 WSDL 설명이 SDO 저장소에 작성됩니다.
애플리케이션이 메시지를 인바운드 서비스가 아닌 소스에서 버스로 게시하는 경우(중개 핸들러를 사용하여 SDO 메시지를 게이트웨이 서비스에서(로) 조정하는 경우와 같이), 애플리케이션은 대상과 연관된 WSDL 서비스(아웃바운드) 또는 기타 호환 가능한 일부 WSDL을 사용해야 합니다.
WebSphere Application Server 버전 5.1에서 이후 버전으로 게이트웨이 마이그레이션
버전 5 게이트웨이가 게이트웨이 서비스를 위해 WSDL을 생성하면 생성된 네임스페이스에는 서비스 이름이 포함됩니다. (예: namespace="http://griddev:9080/wsgw#yourService") 그러나 이후 버전에서 게이트웨이 서비스를 위해 생성된 WSDL에는 서비스 이름이 포함되지 않습니다. (예: namespace="http://griddev:9080/wsgw")
WSDL 바인딩 및 인코딩 스타일이 문서 리터럴이며 클라이언트가 마이그레이션된 게이트웨이와 여전히 동작하면, 문서 리터럴 스타일이 namespace 속성을 사용하지 않기 때문입니다. 그러나, 버전 5.1 게이트웨이 서비스 WSDL을 사용하여 웹 서비스 클라이언트를 생성했고 WSDL 바인딩 및 인코딩 스타일이 문서 리터럴이 아닐 경우, 마이그레이션한 후 새 게이트웨이 서비스 WSDL을 사용하여 클라이언트 스텁을 재생성해야 합니다.
게이트웨이 서비스가 아닌 대상 서비스에 대해 WSDL에서 웹 서비스 클라이언트 생성
대상 서비스에 대한 WSDL에서 웹 서비스 클라이언트를 생성하도록 선택하는 이점은 대상 서비스로 바로 이동하거나 생성된 스텁에서 URL을 변경하여 대상 서비스에 게이트웨이를 통해 이동할 수 있습니다. 이 버전의 게이트웨이에서 이 방법을 사용하려면, 관리 콘솔을 사용하여 게이트웨이 서비스와 연관된 각 인바운드 서비스에서 사용자 정의 특성 com.ibm.websphere.wsgw.mapSoapBodyNamespace를 false로 설정합니다.
- 생성된 스텁에서 URL을 변경하여 메시지를 다시 라우팅하는 유연성을 유지하려면 사용자 정의 특성 com.ibm.websphere.wsgw.mapSoapBodyNamespace를 false로 설정하십시오.
- 더 이상 이 유연성이 필요하지 않는 경우, 최신 버전의 게이트웨이 서비스 WSDL을 사용하여 클라이언트 스텁을 재생성하십시오.
필터를 포함한 게이트웨이를 WebSphere Application Server 버전 5.1에서 이후 버전으로 마이그레이션하면 필터가 더 이상 동작하지 않음
필터 사용은 버전 5.1.1에서 더 이상 사용되지 않으며 버전 7.0에서는 필터 지원이 제거되었습니다. 이전에 필터가 했던 역할을 이제는 JAX-RPC 핸들러와 서비스 통합 버스 중개 조합이 수행합니다. 라우팅 필터를 포함하는 웹 서비스 게이트웨이를 마이그레이션하면 필터 기능을 재작성할 수 있습니다.
필터를 포함한 게이트웨이를 WebSphere Application Server 버전 5.1에서 버전 7.0 이상으로 마이그레이션하면 StorageQueue로 끝나는 이름의 대상이 작성됨
이 추가 대상이 기존 버전 5.1 게이트웨이 필터를 버전 6 환경에서 지원하기 위해 필요합니다. 게이트웨이 필터는 더 이상 지원하지 않으며 이 "StorageQueue" 대상은 버전 7.0 이상에서 더 이상 필요하지 않습니다. 그러나 버전 7.0 이상로 마이그레이션하거나 게이트웨이 인스턴스를 삭제하는 경우 자동으로 제거되지 않습니다.
- -Q 매개변수(공유된 필터 상관 큐 이름)를 지정한 경우, 지정된 이름의 단일 큐 대상이 작성되며(존재하지 않는 경우) 연관된 필터가 있는 모든 게이트웨이 서비스에서 공유됩니다.
- -Q 매개변수를 지정하지 않는 경우, 별도의 큐 대상이 연관된 필터가 있는 각 게이트웨이 서비스에 대해 작성됩니다. 각 대상에는 해당 게이트웨이 서비스 요청 및 응답 대상의 이름에서 파생된 이름이 있으며 StorageQueue로 끝납니다.
게이트웨이 인스턴스 삭제 후, 이름으로 연관된 각 스토리지 큐 대상을 식별하고 비-토픽 영역 버스 대상 삭제에 설명된 대로 삭제하십시오.
클라이언트 애플리케이션이 WebSphere Application Server 버전 5.1에서 작동하지만 이후 버전에서는 잘못 형성된 요청이나 응답으로 문제가 발생함
버스 인에이블된 웹 서비스가 WebSphere Application Server 버전 5.1에서 수행된 유효성 검증보다 훨씬 철처하게 웹 서비스 메시지에 대한 유효성 검증을 확인합니다. 따라서 메시지 파트의 이름을 틀리게 지정하여 잘못 생성된 요청 또는 응답을 사용하고 버전 5.1를 사용할 때 작동하는 일부 클라이언트 애플리케이션은 이후 버전에서 잘못 생성된 것으로 식별됩니다. 이 문제점을 해결하기 위해 수행할 단계는 잘못 구성된 SOAP 메시지의 허용의 내용을 참조하십시오.
WebSphere Application Server 버전 5.1에서 실행 중인 JAX-RPC 클라이언트는 JMS에서의 SOAP를 사용하여 Application Server 버전 5.1에서 실행 중인 웹 서비스를 호출합니다.
WebSphere Application Server 버전 5.1에서 실행 중인 JAX-RPC 클라이언트는 JMS에서의 SOAP를 사용하여 Application Server 버전 5.1에서 실행 중인 웹 서비스를 호출합니다. 대상 MQ Series 큐에서는 사용자 이름이나 비밀번호가 필요하지 않습니다. 애플리케이션 서버를 이후 버전으로 마이그레이션한 후 기본 메시징을 사용하면, 기본 인증이 지금 사용 가능하므로 클라이언트 요청이 실패합니다.
SibMessage W [:] CWSIT0009W: A client request failed in the application
server with endpoint <endpoint_name> in bus your_bus with reason:
CWSIT0016E: The user ID null failed authentication in bus your_bus.
이 문제점을 해결하기 위해 수행할 단계는 서비스 통합 기술 문제점 해결 팁, 버전 5.1 애플리케이션 서버를WebSphere Application Server 버전 7.0 이상에 마이그레이션의 내용을 참조하십시오.
관리 콘솔의 게이트웨이 패널은 WebSphere Application Server Network Deployment에서만 사용 가능함
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
![[IBM i]](../images/iseries.gif)
- Jython 사용:
wsgwAttribs = [] wsgwAttribs.append(["name", wsgwName]) wsgwAttribs.append(["wsdlServiceNamespace", wsgwNamespace]) wsgw = AdminConfig.create("WSGWInstance", bus, wsgwAttribs ) wsgwWsdlAttribs = [] wsgwWsdlAttribs.append(["WSDLLocation", wsgwWsdlLocation]) AdminConfig.create("SIBWSWSDLLocation", wsgw, wsgwWsdlAttribs, "defaultProxyWSDLLocation" )
- Jacl 사용:
set wsgwAttribs {} lappend wsgwAttribs [list "name" $wsgwName] lappend wsgwAttribs [list "wsdlServiceNamespace" $wsgwNamespace] set wsgw [$AdminConfig create "WSGWInstance" $bus $wsgwAttribs] set wsgwWsdlAttribs {} lappend wsgwWsdlAttribs [list "WSDLLocation" $wsgwWsdlLocation] $AdminConfig create "SIBWSWSDLLocation" $wsgw $wsgwWsdlAttribs "defaultProxyWSDLLocation"