cxf와axis2 통합 프로젝트가 jboss에서 weblogic로 이동
13270 단어 weblogicsshcxf 및 axis 통합webservic
프로젝트의 주체 프레임워크는 ssh이고 cxf:2.7.8,axis:1.6.2,quazr 프레임워크를 추가한다.
문제가 해결되었지만 한마디로 말하자면 모든 중간부품의 운행 메커니즘이 다르고 가지고 있는jar도 다르다.우리 프로그램원들 힘들어 죽으려고.기준을 통일하면 안돼요?
문제가 너무 많아서 잘 모르겠고 기록도 안 됐어요.문제 해결 설정과 코드를 붙여라.
web.xml
주의해야 할 점은 jboss,tomcat 아래에서 프로젝트가 실행되는 과정에서 패키지를 풀면 경로가 문제를 찾지 못하고 weblogic가 존재하지 않습니다.전형적인 것은 org다.springframework.web.util.Log4jConfigListener.로그 경로 문제입니다.인터넷에는 많은 방법이 있는데, 직접 servlet으로 대체하는 것도 믿을 수 없다.이것은 내가 Log4jConfigListener 원본 코드를 보고 찾은 방법이다.절대적으로 효과가 있다.프로필이 있으면classses 경로 아래에 두는 것이 가장 좋습니다.
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.xml</param-value>
</context-param>
<!-- WebAppRoot weblogic -->
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
<!-- webAppRootKey weblogic -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>mywebApp.root</param-value>
</context-param>
<!-- spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<!-- log4j -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
cxf 및axis2
cxf와axi2는 통합하는 과정에서 충돌이 발생할 수 있습니다. 가장 주요한jar 파일입니다.
cxf
org.apache.ws.xmlschema:xmlschema-core:jar:2.0.3:compile
axis2
삭제
org.apache.ws.commons.schema:XmlSchema:jar:1.4.7:compile
stax:stax-api:jar:1.0.1:compile
cxf는 wssj 안전 인증을 사용할 때 오류가 발생할 수 있으므로 해당하는 환경 변수를 설정해야 합니다
cxf 클라이언트 테스트 웹 서비스
public static <T> T getWsSecurityServivce(Class<T> servivceclass,String username,String password,String url,Boolean openInterceptorlog){
T t=null;
if(!"com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl".equals(System.getProperty("org.apache.cxf.binding.soap.messageFactoryClassName"))){
System.setProperty("org.apache.cxf.binding.soap.messageFactoryClassName","com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
}
Map<String,Object> outProps = new HashMap<String,Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, username);//
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
//
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientAutherHandler.class.getName());
//outProps.put(WSHandlerConstants.MUST_UNDERSTAND, "0");
if(openInterceptorlog){
jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
jaxWsProxyFactoryBean.getOutFaultInterceptors().add(new LoggingOutInterceptor());
}
jaxWsProxyFactoryBean.getOutInterceptors().add(new SAAJOutInterceptor());
// create
jaxWsProxyFactoryBean.getOutInterceptors().add(new WSS4JOutInterceptor(outProps));
jaxWsProxyFactoryBean.setServiceClass(servivceclass);
jaxWsProxyFactoryBean.setAddress(url);
t = jaxWsProxyFactoryBean.create(servivceclass);
return t;
}
ClientAutherHandler
package com.telecommunications.util;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.log4j.Logger;
import org.apache.ws.security.WSPasswordCallback;
/**
*
* @author Administrator
*
*/
public class ClientAutherHandler implements CallbackHandler{
public static Logger logger=Logger.getLogger(ClientAutherHandler.class);
private Map<String,String> users;
public Map<String, String> getUsers() {
return users;
}
public void setUsers(Map<String, String> users) {
this.users = users;
}
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback pc=(WSPasswordCallback) callbacks[0];
String username=pc.getIdentifier();
//System.out.println("------username----"+username);
if(null!=users){
Set<String> keyusers=users.keySet();
for(String key:keyusers){
if(key.equals(username)){
pc.setIdentifier(username);
pc.setPassword(users.get(key));
break;
}
}
}else{
String password=WsPropertiesUtil.properties.getProperty(username);
if(null==password||"".equals(password)){
logger.warn(" ws-Security "+username+" ");
}
pc.setIdentifier(username);
pc.setPassword(password);
}
}
}
wssj 클라이언트와spring이 계승되면 차단기를 설정합니다.
cxf 서버
스프링 구성
<jaxws:server id="pWsSicfrevenueauditoutsynService"
serviceClass="com.telecommunications.ws.serviceimp.WsSicfrevenueauditoutsynServiceImp"
address="/pWsSicfrevenueauditoutsynServiceImp">
<!-- bean -->
<jaxws:serviceBean>
<bean class="com.telecommunications.ws.serviceimp.WsSicfrevenueauditoutsynServiceImp"></bean>
<!-- bean -->
</jaxws:serviceBean>
<jaxws:inInterceptors>
<ref bean="loggingInInterceptor"/>
<bean class="com.telecommunications.interceptor.CxfWssJSystemEnvIntercepter"></bean>
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" />
<bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="passwordType"
value="PasswordText" />
<entry key="user" value="EDA" />
<entry key="passwordCallbackRef">
<ref bean="serverAutherHandler" />
</entry>
</map>
</constructor-arg>
</bean>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="loggingOutInterceptor"/>
</jaxws:outInterceptors>
</jaxws:server>
CxfWssJSystemEnvIntercepter 클래스
package com.telecommunications.interceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
public class CxfWssJSystemEnvIntercepter extends AbstractPhaseInterceptor<Message>{
public CxfWssJSystemEnvIntercepter(String phase) {
super(phase);
}
public CxfWssJSystemEnvIntercepter(){
super(Phase.RECEIVE);
}
@Override
public void handleMessage(Message message) throws Fault {
if(null==System.getProperty("org.apache.cxf.binding.soap.messageFactoryClassName")||"".equals(System.getProperty("org.apache.cxf.binding.soap.messageFactoryClassName"))){
System.setProperty("org.apache.cxf.binding.soap.messageFactoryClassName","com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl");
//linux Woodstox 4.2.0
System.setProperty("org.apache.cxf.stax.allowInsecureParser","1");
System.setProperty("org.apache.cxf.stax.maxChildElements","50000");
System.setProperty("org.apache.cxf.stax.maxElementDepth","100");
System.setProperty("org.apache.cxf.stax.maxAttributeCount","500");
System.setProperty("org.apache.cxf.stax.maxAttributeSize",String.valueOf(64 * 1024));
System.setProperty("org.apache.cxf.stax.maxTextLength",String.valueOf(128 * 1024 * 1024));
System.setProperty("org.apache.cxf.stax.maxElementCount",String.valueOf(Long.MAX_VALUE));
System.setProperty("org.apache.cxf.stax.maxXMLCharacters",String.valueOf(Long.MAX_VALUE));
System.setProperty("org.apache.cxf.staxutils.innerElementCountThreshold",String.valueOf(50000));
System.setProperty("org.apache.cxf.staxutils.innerElementLevelThreshold",String.valueOf(100));
}
}
}
serverAutherHandler
/**
*
* @author Administrator
*
*/
public class ServerAutherHandler implements CallbackHandler{
public static Logger logger=Logger.getLogger(ServerAutherHandler.class);
private Map<String,String> users;
public Map<String, String> getUsers() {
return users;
}
public void setUsers(Map<String, String> users) {
this.users = users;
}
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
WSPasswordCallback pc=(WSPasswordCallback) callbacks[0];
String username=pc.getIdentifier();
//String password=pc.getPassword();
//System.out.println("username"+username);
//System.out.println("password"+password);
if(null==users){
logger.info("---- --------");
}else{
Set<String> keyusers=users.keySet();
for(String key:keyusers){
if(key.equals(username)){
pc.setPassword(users.get(key));
break;
}
}
}
}
}
hibernate
ClassNotFoundException: org.hibernate.hql.ast.HqlToken
1 프로젝트에서jarantlr:antlr:jar:2.7.6을 자체 도메인lib 폴더 아래로 복사합니다 (마음에 드는 것)
D:\weblogicinstall\user_projects\domains\myuser_domain\lib
2 setDomainEnv를 수정합니다.cmd 파일
D:\weblogicinstall\user_projects\domains\myuser_domain\bin
set PRE_CLASSPATH=D:\weblogicinstall\user_projects\domains\myuser_domain\lib\antlr-2.7.6.jar
set CLASSPATH=%PRE_CLASSPATH%;%CLASSPATH%
weblogic
웹logic는 웹 서비스와 관련된jar를 가지고 있습니다.그래서 배치는 프로젝트와 관련된jar 충돌, 그리고jar가 선후 순서를 불러오는 문제입니다.이것은 골치 아픈 일이다.일련의 문제를 야기할 것이다.
WEB-INF에 weblogic을 새로 만듭니다.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
<context-root>/mywebname</context-root>
<container-descriptor>
<prefer-web-inf-classes>false</prefer-web-inf-classes>
<prefer-application-resources>
<resource-name>META-INF/services/javax.xml.ws.spi.Provider</resource-name>
</prefer-application-resources>
<prefer-application-packages>
<package-name>org.python.core.*</package-name>
<package-name>com.ctc.wstx.*</package-name>
</prefer-application-packages>
</container-descriptor>
</weblogic-web-app>
범한 실수가 여러분에게 도움이 되었으면 좋겠습니다. 전재하여 출처를 설명해 주십시오
-----------------------------------------------------------------
현재 프로젝트에 문제가 발생했습니다. linux 환경에서는 경고 메시지가 있습니다. WARN: org.apache.cxf.staxutils.StaxUtils - Could not create a secure Stax XMLInputFactory. Found class com.ctc.wstx.stax.WstxInputFactory. Suggest Woodstox 4.2.0 or newer.정상 사용에 영향을 미치지 않음
윈도우 환경에서는 경고 메시지가 없습니다.원본을 뒤져서 어떻게 해결해야 할지 모르겠다.만나서 해결하는 친구가 있으면 알려주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cxf와axis2 통합 프로젝트가 jboss에서 weblogic로 이동프로젝트 개발 초기에 사용된 중간부품 서버는 jboss로 jboss 아래에서 잘 작동합니다.수요 변경, 상부에서 중간부품 서버 교체를 요구합니다.이것은 간단한 일이라고 생각하기 시작했는데, 바로 배치 문제였다.프로젝...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.