반응형
action web service에서 SOAP 서비스의 함수 이름은 apis에 정의된 ****_api.rb 에 정의 된다. 이때 다음과 같이
의 형태로 정의되며 api_method의 함수명이 SOAP 메소드의 함수명이 된다. api_method의 함수명을 "testMethod"로 소문자로 시작하게 하고, controller에서 def testMethod 와 같이 함수를 정의한 다음 testMethod에 대해서 SOAP 호출을 하게 되면 다음과 같은 에러가 나타난다
api_method :함수명, expects => 입력파라미터, :returns => 출력파라미터
의 형태로 정의되며 api_method의 함수명이 SOAP 메소드의 함수명이 된다. api_method의 함수명을 "testMethod"로 소문자로 시작하게 하고, controller에서 def testMethod 와 같이 함수를 정의한 다음 testMethod에 대해서 SOAP 호출을 하게 되면 다음과 같은 에러가 나타난다
ActionWebService::Dispatcher::DispatcherError (no such method 'testMethod' on API TestApi):
action web service에서는 호출하는 SOAP 함수에 대해서 api_method에 정의된 함수를 찾는데 이때 SOAP에서 호출한 함수 이름을 가지고 Ruby에서 구현된 함수를 찾게 된다. 이때 api.rb의 public_api_method_name이라는 함수를 호출하여 호출하는 함수 명을 정의하게 되는데 public_api_method_name함수는 다음과 같다.
def public_api_method_name(name)
if inflect_names
name.to_s.camelize
else
name.to_s
end
end
여기에서 보면 들어온 name(SOAP API이름)에 대해서 camelize를 하게 되는데 이렇게 되면 첫 영문자가 대분자가 되게 된다. 이는 Ruby의 함수 명명 규칙과 연관이 있어 보이는데 이렇게 되면 SOAP API에서 소문자로 시작하는 함수를 정의할수가 없게 된다. 따라서 이것을 다음과 같이 변경한다.
def public_api_method_name(name)
name.to_s
end
def public_api_method_name(name)
if inflect_names
name.to_s.camelize
else
name.to_s
end
end
여기에서 보면 들어온 name(SOAP API이름)에 대해서 camelize를 하게 되는데 이렇게 되면 첫 영문자가 대분자가 되게 된다. 이는 Ruby의 함수 명명 규칙과 연관이 있어 보이는데 이렇게 되면 SOAP API에서 소문자로 시작하는 함수를 정의할수가 없게 된다. 따라서 이것을 다음과 같이 변경한다.
def public_api_method_name(name)
name.to_s
end
반응형