시나리오는 다음과 같습니다. 우리는 PeopleSoft가 있으며 salesforce에서 메시지를주고 받고 싶습니다. 불행히도 PeopleSoft에는 wsdl을 사용하고 클래스를 생성하는 wsimport와 같은 도구가 없습니다. wsdl을 소비하는 것이 있지만 스텁 메시지 객체를 생성하는 것은 전부입니다. 개발자는 xml 메시지 문자열을 수동으로 생성하는 코드를 작성해야합니다.jax-ws를 사용하여 xml을 생성 할 수는 있지만
나는 분명히 그 모든 것을하고 싶지 않습니다. 따라서 Java가 PeopleSoft에서 호출 될 수 있다는 것을 알고 있습니다. 또한 생성 된 클래스를 사용하여 메시지를 보낼 수도 있지만 PeopleSoft에 내장 된 메시지 모니터링 기능을 사용하고자합니다.
그래서 내가 뜻을 생각하고 가능한 해결책 :
- 호출 자바에서 웹 서비스 방법은 피플 메커니즘 을 통해 XML을 전송
- 응답 XML 가져 오기
- 응답 XML 클래스에 응답을 다시 전달
- Java 클래스를 사용하여 gra b 값은 xml 내
나는 미친가요?
p.s. 나는 초보자 자바 개발자이다.
다음은 XML을 가져 오는 내 처리기 클래스이지만, 메시지가 전송되지 않도록하는 방법이 필요하다.
public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {
// change this to redirect output if desired
private static PrintStream out = System.out;
private String xmlOut = null;
public Set<QName> getHeaders() {
return null;
}
public boolean handleMessage(SOAPMessageContext smc) {
logToSystemOut(smc);
return true;
}
public boolean handleFault(SOAPMessageContext smc) {
logToSystemOut(smc);
return true;
}
// nothing to clean up
public void close(MessageContext messageContext) {
}
public String getXmlOut() {
return xmlOut;
}
/*
* Check the MESSAGE_OUTBOUND_PROPERTY in the context
* to see if this is an outgoing or incoming message.
* Write a brief message to the print stream and
* output the message. The writeTo() method can throw
* SOAPException or IOException
*/
private void logToSystemOut(SOAPMessageContext smc) {
Boolean outboundProperty = (Boolean)
smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
SOAPMessage message = smc.getMessage();
try {
ByteArrayOutputStream baOut = new ByteArrayOutputStream();
message.writeTo(baOut);
xmlOut = new String(baOut.toByteArray());
} catch (Exception e) {
out.println("Exception in handler: " + e);
}
}
}
새로운 웹 서비스 엔드 포인트를 작성하는 경우 SEI는 높은 추상화를 위해 제공되는 XML로 작업하기 때문에 공급자 기반 메커니즘 인 SEI JAX-WS 메커니즘을 선호합니다. –
예제를 살펴보면서 처리기 클래스를 구현했지만 추가 처리에서 SOAP 메시지를 어떻게 멈출 수 있는지 확신 할 수 없습니다. 그 어떤 힌트라도? 다음은 내 처리기 클래스입니다. 'public boolean handleMessage (SOAPMessageContext smc) { logToSystemOut (smc); return true; } 개인 무효 logToSystemOut (SOAPMessageContext smc) { SOAPMessage message = smc.getMessage(); 시도 { ByteArrayOutputStream baOut = new ByteArrayOutputStream(); message.writeTo (baOut); xmlOut = new String (baOut.toByteArray()); } } – willard
1. PeopleSoft에서 SalesForce에 의해 노출 된 서비스를 호출하고 있다고 생각합니다. 따라서 클라이언트 측 런타임에서 생성하는 SOAP 메시지를 가로 채기 (PeopleSoft 메커니즘을 통해 전달할 수 있도록)하기 때문에 클라이언트 측에서 Handler를 정의해야합니다. 핸들러를 정의한 방법은 서버 측에서 핸들러를 정의하는 데 사용됩니다. 클라이언트 측 핸들러는 다르게 정의됩니다. 아이디어를 얻으려면 http://bit.ly/zGerml을 참조하십시오. –