cxf와axis2 통합 프로젝트가 jboss에서 weblogic로 이동

프로젝트 개발 초기에 사용된 중간부품 서버는 jboss로 jboss 아래에서 잘 작동합니다.수요 변경, 상부에서 중간부품 서버 교체를 요구합니다.이것은 간단한 일이라고 생각하기 시작했는데, 바로 배치 문제였다.프로젝트를 웹logic에 배치하여 실행하는 순간까지 완전히 멍청해졌다.많은 실수.
프로젝트의 주체 프레임워크는 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.정상 사용에 영향을 미치지 않음
윈도우 환경에서는 경고 메시지가 없습니다.원본을 뒤져서 어떻게 해결해야 할지 모르겠다.만나서 해결하는 친구가 있으면 알려주세요.

좋은 웹페이지 즐겨찾기