>백엔드 개발 >PHP 튜토리얼 >JAVA WebService_PHP Tutorial을 호출할 때 PHP5에서 발생하는 다양한 문제에 대한 솔루션

JAVA WebService_PHP Tutorial을 호출할 때 PHP5에서 발생하는 다양한 문제에 대한 솔루션

WBOY
WBOY원래의
2016-07-22 09:02:47836검색

갱킹을 시작하세요.

서버:

Spring3.0.5 CXF2.4, JDK1.6

자동으로 생성된 wsdl 파일이 "되어야 합니다"<서버는 우리 것이 아닙니다>

클라이언트:

PHP5.1.3

첫 번째 질문:

SOAP-ERROR: 인코딩: 객체에 'id' 속성이 없습니다

근데 API 문서에는 ID가 필요하지 않다고 되어 있으니 wsdl 파일의 내용을 확인하세요

스키마 문서를 확인하고 다음 내용을 찾으세요.

스키마를 통해 maxOccurs 및 minOccurs 속성을 사용하여 요소가 나타날 수 있는 횟수를 정의할 수 있습니다. maxOccurs는 요소의 최대 발생 횟수를 정의하고, minOccurs는 요소의 최소 발생 횟수를 정의합니다. maxOccurs와 minOccurs의 기본값은 모두 1입니다! (그럼 서버측 문제인가요? 그럼 그냥 값만 썼더니 통과됐네요...)


추신: 중간에 작은 링크가 있습니다. PHP 소스 코드를 살펴봤습니다. . .

SOAP의 php_encoding.c에 있는 model_to_xml_object 함수

static int model_to_xml_object(xmlNodePtr node, sdlContentModelPtr model, zval *object, int style, int strict TSRMLS_DC)

//작은 코드


} else if (모델->min_occurs == 0) {
2를 반환
} 다른 {
if (엄격) {
Soap_error1(E_ERROR, "인코딩: 객체에 '%s' 속성이 없습니다.", model->u.element->name);//분명히 }
0을 반환
}

min_occurs에서 문제가 발생했다는 사실을 여기서 알게되어 위의 문제를 해결했습니다(상대방이 너무 표준화되어 있지 않았나요?)

두 번째 질문:

XML 문서가 없는 것 같습니다

이 문제를 해결하는 데 오랜 시간이 걸렸기 때문에 답답합니다

데이터가 반환된 후 패킷을 캡쳐했는데(데이터를 직접 표시하는 방법이 있는 것 같습니다) 반환된 데이터가 다음 형식과 유사하다는 것을 확인했습니다.

HTTP/1.1 200 OK
서버: Apache-Coyote/1.1
콘텐츠 유형: multipart/관련; 경계 = "uuid:0c37c356-41de-4361-9835-ab8dc023dcac"; start="" 시작 정보="텍스트/xml"
콘텐츠 길이: 790
날짜: 2012년 12월 4일 화요일 07:57:45 GMT


--uuid:0c37c356-41de-4361-9835-ab8dc023dcac
콘텐츠 유형: 애플리케이션/xop xml; type="text/xml"; 콘텐츠 전송 인코딩: 바이너리
콘텐츠 ID: 20032012-12-04 15:57:46.124논리 오류< ;/msg>sfn004.cn:瀵游笧璧Feng纴姝ゅ璖嵝€廃彽奇$Embroidery绔欌€濋獙癇佹湇锷$diXuanfeng鍦ㄥ镙畐腑Adze屼謉鑳 빌림囀娆℃开鍐粋璒zhjx922.com:瀵游第璧璒纴姝ゅyan钖嵝€仃彰equi$자수绔欌€濋獙璇佹湇锷$dixuanfeng鍦ㄥ镙锑锛屼鑳 rent啀娆℃开捐沋紒< ;/return> --uuid:0c37c356-41de-4361-9835-ab8dc023dcac--
분명히 XML은 아닙니다. . 그래서 PHP 상사가 오류를 보고했습니다



상대방에게 물어보면 대답은 이렇습니다.

CXF는 다음과 같은 업로드 속성을 설정합니다. 핵심은 PHP SOAP 확장이 이를 기본적으로 지원하지 않는다는 것입니다

baidu, google은 WSO2 WSF FOR PHP 확장을 통해 구현할 수 있습니다. 신경 쓰지 말고 계속 찾아보세요. . .

공식문서 소개 보러가기

http://cn2.php.net/soap

문제 해결에 도움이 되는 답변이 있었습니다. 최종 해결 방법은 다음과 같습니다.

/**
* SoapClient 클래스를 상속하고 __doRequest 메서드를 재정의합니다.
* @author zhjx922
*/
클래스 ZSoapClient는 SoapClient를 확장합니다
{
공개 함수 __doRequest($request, $location, $action, $version, $one_way = 0)
{
$response = parent::__doRequest($request, $location, $action, $version, $one_way)

//실제 상황에 따라 처리합니다. . . , 로 변경하세요. $start=strpos($response,'<비누')
$end=strrpos($response,'>')
$response_string=substr($response,$start,$end-$start 1)
반환($response_string)
}
}

www.bkjia.comhttp: //www.bkjia.com/PHPjc/371863.htmlTechArticle갱크를 시작하세요. 서버: Spring3.0.5 CXF2.4, JDK1.6 wsdl 파일은 자동으로 생성되어야 합니다. 서버는 우리 클라이언트가 아닙니다: PHP5.1.3 첫 번째 문제 발생: SOAP-ERROR: Enco...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.